Android Broadcastreceiver无法正常工作?

时间:2017-04-08 19:51:51

标签: android broadcastreceiver

我试图使用广播接收器来捕获网络变化,但它似乎并没有起作用。

我的广播接收者:

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,有人知道为什么它没有解雇吗?

2 个答案:

答案 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请求通知。

您应该以编程方式注册或使用JobSchedulerGcmNetworkManagerandroid-job