有一次,我有一个概率,你们真的很有帮助。所以在这里,我又遇到了另一个问题,我已经陷入了......:/getBoolean(EXTRA_NO_CONNECTIVITY)总是返回false
我正在运行扩展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在模拟器上尝试了它,并且我还通过关闭路由器在我的dev-phone上尝试了它(它没有SIM,因特网访问是通过我的无线路由器) - >没有上网保证!
我的清单包括下面几行:
...
<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" />
我的清单文件没有改变,当我改变了一行: intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
到 intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
结果总是如此 - 因此它总是试图阻止我的服务并且永远不会启动它。
我怀疑根本不读取来自意图的附加功能,这就是为什么getBooleanExtra()
的默认值总是返回。
PS。我在Android 2.1上
谢谢!
我知道你用过的方法。然而,我有些惊讶,很多人推荐我使用的代码(我也在最近在android上购买的O'reilly书上阅读它!)如果我无法找到CONNECTIVITY_ACTION广播的解决方案,我想我会按照您的示例并使用ConnectivityManager的方法检查我的服务。感谢您的回复:) – snoopaki
不用客气@snoopaki - 实际上,我宁愿使用您的方法提供解决方案,但我只是看不到发生了什么,为什么。 – Shlublu
我实际上已将我的服务更改为IntentService,并且对连接更改的服务中处理更有意义。所以我应该选择合适的答案! thx :) – snoopaki