2017-04-08 113 views
0

我正在尝试使用broadcastreceiver来捕获网络更改,但它似乎根本没有工作。Android广播接收器不工作?

我的广播接收器:

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

您的软件包名称不应该是Intent操作的一部分。因此,尝试用:

filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); 

更妙的是,有一个为一个常数:

filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
0

应用定位的Android N (Nougat)没有收到CONNECTIVITY_ACTION广播,即使他们有清单条目请求这些事件的通知。如果正在运行的应用程序请求BroadcastReceiver通知,它们仍然可以在其主线程上侦听CONNECTIVITY_CHANGE

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

+0

这是真的,虽然他以编程方式注册'BroadcastReceiver',这是合法的。他可能会将接收器添加到清单中以使其工作,这是毫无意义的,因为它试图拦截错误的“Intent”动作 – quiro