2017-04-08 184 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