GSM電話がネットワークに接続されたばかりであることを検出する必要があります(セルタワーが使用できない状態からセルタワーが接続されている状態まで)。このために、ブロードキャストレシーバー AIRPLANE_MODE (オフにする) とBOOT_COMPLETEを設定します。これら 2 つが起動すると、ネットワークが検出されるまでしばらくループします。ただし、これとは別に、電話は次のような場所にある可能性があります
セルタワーは利用できません
どうすればそのような状況を検出できますか?
GSM電話がネットワークに接続されたばかりであることを検出する必要があります(セルタワーが使用できない状態からセルタワーが接続されている状態まで)。このために、ブロードキャストレシーバー AIRPLANE_MODE (オフにする) とBOOT_COMPLETEを設定します。これら 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 の場合、ネットワーク接続がないことを意味するため、レシーバーは終了します。次回接続が変更されると、レシーバーが再びアクティブになり、このチェックが再度実行されます。チェックに合格したら、私は自分がすることを何でもします。
CONNECTIVITY_CHANGE は機内モードのエミュレーターで動作するようですが、私のデバイスでは 3G ネットワーク状態の変更に対してのみ起動しました。今、私はSERVICE_STATE_CHANGEに落ち着かなければなりませんでした.機内モードとタワーの突然の喪失の間の切り替えのために解雇されました. 再起動には、BOOT_COMPLETED を使用しました。