![](/img/trans.png)
[英]Alternative to NetworkInfo.isConnected() (Deprecated in API 23) for Network objects
[英]NetworkInfo is not properly responding to network changes on phone running Nougat
前言:在運行6.0.1的手機上運行正常。 但是在運行7.1.1的手機上,它不是,如下所示。
build.gradle(模塊:app)
compileSdkVersion 25
buildToolsVersion "25.0.0"
applicationId "com.gesslar.threshvote"
minSdkVersion 19
targetSdkVersion 25
AndroidManifest.xml中
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<receiver
android:name=".NetworkChangeReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
NetworkUtil.java我有一個BroadcastReceiver,我用它來簡單地調用NetworkUtil.updateNetworkStatus(context);
public static void updateNetworkStatus(Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork == null) {
Log.d(TAG, "NO CONNECTION INFORMATION");
return;
}
if (activeNetwork.isConnected()) {
Log.d(TAG, "WE ARE CONNECTED TO A NETWORK");
} else {
Log.d(TAG, "WE ARE NOT CONNECTED TO A NETWORK");
return;
}
Log.d(TAG, "NETWORK TYPE: " + activeNetwork.getTypeName());
}
從WiFi和數據連接開始我已完成以下測試 關閉WiFi
03-08 20:15:04.664 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
打開WiFi:
03-08 20:15:26.333 29796-29796/com.gesslar.threshvote D/NetworkUtil: WE ARE CONNECTED TO A NETWORK
03-08 20:15:26.333 29796-29796/com.gesslar.threshvote D/NetworkUtil: NETWORK TYPE: MOBILE
關閉數據:
No log line written
打開數據:
No log line written
關閉WiFi然后關閉數據:
1) 03-08 20:17:13.029 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
2) No log line written
關閉兩個,打開WiFi:
03-08 20:18:00.198 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
^ showed as soon as it started seeking for WiFi, but no further log line was written when WiFi became active.
我對結果感到非常困惑。 我在其他地方看到我應該在運行時綁定它,但是,我唯一的活動是Preferences活動。 該應用程序不具有運行時UI,而是使用后台IntentService和Notifications。
根據android文檔 ,
針對Android 7.0(API級別24)及更高版本的應用如果在其清單中聲明廣播接收器,則不會收到CONNECTIVITY_ACTION廣播。 如果應用程序使用Context.registerReceiver()注冊其BroadcastReceiver並且該上下文仍然有效,則仍會收到CONNECTIVITY_ACTION廣播。
所以你需要做的是啟動一個Service
,創建一個廣播接收器NetworkChangeReceiver
的新實例並注冊它以通過使用它來監聽它到android.net.conn.CONNECTIVITY_CHANGE
registerReceiver(new NetworkChangeReceiver(), new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.