我试图使用广播接收器来捕获网络变化,但它似乎并没有起作用。
我的广播接收者:
public class btReceiver extends BroadcastReceiver {
public btReceiver() {
}
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("BB","Received!");
Toast.makeText(context, "Action: " + intent.getAction(), Toast.LENGTH_LONG);
}
}
我称之为:
IntentFilter filter = new IntentFilter();
filter.addAction(getPackageName() + "android.net.conn.CONNECTIVITY_CHANGE");
btReceiver myReceiver = new btReceiver();
registerReceiver(myReceiver, filter);
但是当我尝试切换时,让我们说wifi,根本没有任何事情发生。我也尝试在清单中声明它:
<receiver android:name=".btReceiver" android:enabled="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
但这也不起作用。
我已在我的清单中声明了足够的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
我的测试设备运行的是Android 7.1.1,有人知道为什么它没有解雇吗?
答案 0 :(得分:0)
您的包名称不应该是Intent
操作的一部分。所以尝试:
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
更好的是,有一个常数:
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
答案 1 :(得分:0)
定位到Android N (Nougat)
的应用不会收到CONNECTIVITY_ACTION
广播,即使他们有明确的条目来请求通知这些事件。正在运行的应用仍然可以在主线程上监听CONNECTIVITY_CHANGE
,如果他们通过BroadcastReceiver
请求通知。
您应该以编程方式注册或使用JobScheduler
,GcmNetworkManager
或android-job库