Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android广播接收器不工作?_Android_Broadcastreceiver - Fatal编程技术网

Android广播接收器不工作?

Android广播接收器不工作?,android,broadcastreceiver,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: " +

我试图使用广播接收器来捕获网络变化,但它似乎根本不起作用

我的广播接收器:

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,有人知道它为什么不启动吗?

您的程序包名称不应该是
意图的一部分。因此,请尝试:

filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
更好的是,有一个常数:

filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

针对安卓
N(牛轧糖)
的应用程序不会收到
CONNECTIVITY\u ACTION
广播,即使它们有清单条目请求通知这些事件。正在运行的应用程序如果请求使用
BroadcastReceiver
通知,仍可以在其主线程上侦听
CONNECTIVITY\u CHANGE


您应该以编程方式注册它,或者使用
JobScheduler
GcmNetworkManager
或library

这是正确的,尽管他是以编程方式注册
BroadcastReceiver
,这是合法的。他可能在清单中添加了接收者以使其工作,这是毫无意义的,因为它试图拦截错误的
意图
操作