繁体   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