關(guān)于android.net.conn.CONNECTIVITY_CHANGE廣播無(wú)法接收的問(wèn)題

在工作中調(diào)試一個(gè)功能的時(shí)候,發(fā)現(xiàn)之前的android.net.conn.CONNECTIVITY_CHANGE的廣播始終無(wú)法收到,而adb logcat打印出來(lái)的log發(fā)現(xiàn)有其他應(yīng)用可以收到這個(gè)廣播的。后來(lái)研究發(fā)現(xiàn)在Android7.0 上為了優(yōu)化后臺(tái)省電相關(guān)的東西,已經(jīng)將靜態(tài)注冊(cè)這個(gè)廣播方式取消了,7.0 版本上靜態(tài)注冊(cè)此廣播的,已經(jīng)無(wú)法收到這個(gè)廣播了。
Android 7.0 為了后臺(tái)優(yōu)化,推薦使用 JobScheduler 代替 BroadcastReceiver 來(lái)監(jiān)聽(tīng)網(wǎng)絡(luò)變化。

如果你的應(yīng)用無(wú)法將targetSDK 降到23或者23以下,有以下兩種比較快捷的適配方式。
解決方式有2種:
1.改成動(dòng)態(tài)注冊(cè)。
2.使用ConnectivityManager.NetworkCallback 來(lái)監(jiān)聽(tīng)網(wǎng)絡(luò)。

第二種實(shí)現(xiàn)方式:

final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
cm.requestNetwork(new NetworkRequest.Builder().build(), new ConnectivityManager.NetworkCallback() {
    @Override
    public void onLost(Network network) {
        super.onLost(network);
         ///網(wǎng)絡(luò)不可用的情況下的方法
    }

    @Override
    public void onAvailable(Network network) {
        super.onAvailable(network);
        ///網(wǎng)絡(luò)可用的情況下的方法
    }
});

很簡(jiǎn)單。

如果我們僅僅驗(yàn)證此廣播,無(wú)需申明任何權(quán)限即可收到此廣播消息,但是往往應(yīng)用還需要訪(fǎng)問(wèn)網(wǎng)絡(luò)等操作,需要申請(qǐng)以下網(wǎng)絡(luò)權(quán)限。
AndroidManifest.xml中申明權(quán)限:

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>

這幾個(gè)權(quán)限都不是危險(xiǎn)權(quán)限,直接申明即可。存在如果不申明android.permission.CHANGE_NETWORK_STATE 這個(gè)權(quán)限的時(shí)候,應(yīng)用報(bào)錯(cuò)的情況。

總結(jié)

1.如果應(yīng)用程序的targetSDK >= N,可以采用上述兩種方案解決此問(wèn)題,也就是說(shuō)靜態(tài)注冊(cè)android.net.conn.CONNECTIVITY_CHANGE不再起作用,需要修改成動(dòng)態(tài)注冊(cè)或者使用ConnectivityManager.NetworkCallback監(jiān)聽(tīng)網(wǎng)絡(luò)。
2.如果應(yīng)用程序的targetSDK<N,即使安裝在Android7.0機(jī)器上,同樣可以收到靜態(tài)注冊(cè)的廣播。

感謝

參考:http://blog.csdn.net/hqiangtai/article/details/53228510

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容