簡體   English   中英

實施ConnectivityManager和NetworkInfo時,應用程序停止

[英]App stops when implementing ConnectivityManager and NetworkInfo

對於我的應用程序,我試圖檢測用戶何時連接到互聯網。 這是我一直在使用的方法之一,盡管我使用了其他基本相同的方法,但是使用了所使用對象的其他方法:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected())
{
  return true;
}
  return false;
}

即使這不會導致任何編譯錯誤,在啟動應用程序時,它也會突然停止並且不響應。 我想知道為什么會發生這種情況,以及如何解決,或者如果沒有解決方案,是否還有另一種方法可以做我想要的事情。

我嘗試過策略性地刪除部分代碼,並且我注意到導致問題的部分是使用兩種方式使用的netInfo ,但是我不知道為什么。

AndroidManifest文件中添加訪問網絡權限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

首先像這樣在AndroidManifest.xml文件中添加users-permission

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

其次,這段代碼可以給你一個boolean 網絡連接是否可用。 所以把它放在一個方法中,然后像這樣返回這些代碼。

public boolean getCheckedNetStatus(Context context) {
   try{
      ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
      if (networkInfo != null && networkInfo.isConnected()) {
         return true;
      } else {
         return false;
      }
   }catch(Exception e){
     Log.e("Net Check Err", e.toString());
     return false;
   }
}

試用try可以保護您的應用程序免於意外崩潰。

現在調用它有條件地執行您的某些操作,例如

if(getCheckedNetStatus(yourActivity.this)){
    //Net is available 
    //So do your action
}else{
   //Net not available 
   //you can notify user that net not available 
   //So you (User) can't do this
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM