2017-05-16 41 views
0

工作我使用檢查互聯網連接的代碼到目前爲止是ConnectivityManager不要在安卓6.0

private boolean isOnline() { 
     boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 
     return haveConnectedWifi || haveConnectedMobile; 
    } 

我的代碼是工作的罰款,直到安卓5.0,但在安卓6.0應用程序崩潰誰能幫助我在這個問題並提供我一個更好的代碼,它可以測試互聯網連接 感謝 問候

回答

2

getAllNetworkInfo已被棄用

你需要使用:getActiveNetworkInfo()

代碼:

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      // connected to wifi 
      Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      //connected to Data 
      Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
     } 
    } else { 
     // not connected to the internet 
    } 
+0

您好歡迎堆棧溢出......如果答案幫助其標記通過點擊是正確的答案左邊的刻度線標誌。 – rafsanahmad007

+0

是的,它工作非常感謝 – bufferking

1

ConnectivityManager documentation

NetworkInfo[] getAllNetworkInfo()

此方法在API級別23.

此方法不支持同一類型的多個連接的網絡被棄用。改爲使用getAllNetworks()getNetworkInfo(android.net.Network)

請記住getAllNetworks()在API級別21中引入,所以你可能需要運行兩個不同的方法based on the user's OS version

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    // Use getAllNetworks() 
} else{ 
    // Use getAllNetworkInfo() 
}