ある時、私が問題を抱えていたとき、皆さんは本当に役に立ちました。だからここで私は再び私が陥った別の問題に直面しています...:/
BroadcastReceiverを拡張するカスタムNetworkReceiverを実行しています。電話がインターネットに接続されていることを検出して、いつでもサービスを開始できるようにしたい。私は多くのトピックを読みましたが、すべてのトピックは多かれ少なかれ、私には機能しない次のコードを表示します。
public class NetworkReceiver extends BroadcastReceiver {
private static final String tag = NetworkReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag,"****** NetworkReceiver // onReceive()");
boolean noConnection = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.i(tag,"****** NetworkReceiver // Network Down?: " + intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false));
}
// TODO Bug: Never stops the service. Stays always connected!
if(noConnection) {
Log.i(tag,"****** NetworkReceiver // Stopping Service...");
context.stopService(new Intent(context, FetchService.class));
} else {
Log.i(tag,"****** NetworkReceiver // Starting Service!");
context.startService(new Intent(context, FetchService.class));
}
}
私が抱えている問題は、logcatが常に戻りNetworkDown?: false
、サービスが停止しないことです(常に再起動します)。F8キーを押してエミュレーターで試してみました。また、ルーターの電源を切って開発電話(SIMがなく、インターネットアクセスはwifiルーターによるものです)でも試してみました->インターネットアクセスは保証されていません!
私のマニフェストには次の行が含まれています。
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
...
また、マニフェストファイルを変更せずに試したこと、および行を
<action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
変更したときに
結果が常にtrueであったことにも注意する必要があり
ます。したがって、常にサービスを停止しようとし、サービスを開始しませんでした。intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
インテントからのエクストラがまったく読み取られていないのではないかと思うので、デフォルト値のがgetBooleanExtra()
常に返されます。
PS。私はAndroid2.1を使用しています
ありがとう!