0

GSM電話がネットワークに接続されたばかりであることを検出する必要があります(セルタワーが使用できない状態からセルタワーが接続されている状態まで)。このために、ブロードキャストレシーバー AIRPLANE_MODE (オフにする) とBOOT_COMPLETEを設定します。これら 2 つが起動すると、ネットワークが検出されるまでしばらくループします。ただし、これとは別に、電話は次のような場所にある可能性があります

セルタワーは利用できません

どうすればそのような状況を検出できますか?

4

2 に答える 2

2

「android.net.conn.CONNECTIVITY_CHANGE」のインテント フィルタを使用して設定された BroadcastReceiver を使用できます。

<receiver android:name=".ConnectivityActionReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

そのレシーバーでは、インテントのエクストラを見て、接続があるかどうかを判断できます。私は次のようにします:

@Override
public void onReceive( Context context, Intent intent )
{
    Intent startIntent;
    SharedPreferences prefs;
    String action;
    int updateType;

    action = intent.getAction();
    if ( !action.equals( ConnectivityManager.CONNECTIVITY_ACTION ) )
        return;

    /* If we don't have a connection, nothing to do */
    if ( intent.getBooleanExtra( ConnectivityManager.EXTRA_NO_CONNECTIVITY, false ) )
        return;

その 2 番目の if チェックが true の場合、ネットワーク接続がないことを意味するため、レシーバーは終了します。次回接続が変更されると、レシーバーが再びアクティブになり、このチェックが再度実行されます。チェックに合格したら、私は自分がすることを何でもします。

于 2012-11-25T03:30:51.400 に答える
0

CONNECTIVITY_CHANGE は機内モードのエミュレーターで動作するようですが、私のデバイスでは 3G ネットワーク状態の変更に対してのみ起動しました。今、私はSERVICE_STATE_CHANGEに落ち着かなければなりませんでした.機内モードとタワーの突然の喪失の間の切り替えのために解雇されました. 再起動には、BOOT_COMPLETED を使用しました。

于 2012-11-26T15:23:14.637 に答える