Android 来自NetworkChangeReceiver的广播无法通过
我实现了一个Android 来自NetworkChangeReceiver的广播无法通过,android,message-passing,localbroadcastmanager,Android,Message Passing,Localbroadcastmanager,我实现了一个networkchangerecever,如下所示: public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final ConnectivityManager connectionManager = (ConnectivityManager) con
networkchangerecever
,如下所示:
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final ConnectivityManager connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo wifi = connectionManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
logMessage(context, "Network State has changed.");
if (!wifi.isAvailable()) {
logMessage(context, "Golly gosh. WiFi has gone away.");
}
}
private void logMessage(Context context, String message) {
Intent intent = new Intent("logging-event");
intent.putExtra("message", message);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
}
在我的活动中,我还添加了一个广播接收器:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
logMessages.add(message);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
LocalBroadcastManager
.getInstance(this)
.registerReceiver(mMessageReceiver, new IntentFilter(("logging-event")));
}
AndroidManifest.xml
<receiver android:name=".NetworkChangeReceiver"
android:label="NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
但由于未知原因,未调用活动上的onReceive方法。知道为什么会这样吗?可能是因为日志记录方法中使用了不同的上下文?如果我使用一个简单的toast,它就会通过,如果我在一个服务中使用相同的日志记录方法,我可以将该服务本身用作上下文。您是否在AndroidManifest.xml中注册了该意图?这是我要检查的第一件事 如果没有,请验证您是否具有适当的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
尝试使用活动的registerReceiver()
方法,而不是使用LocalBroadcastManager
不是100%确定,但是看一看,我注册了NetworkChange intent本身,这就是为什么它也会被接收并执行代码,但不是用于日志记录的。抱歉,我刚才看到了,所以我删除了评论。权限如何,您是否请求了相应的权限?请参阅我的编辑。