网络不可用时防止应用崩溃

我有一个应用程序,它具有从服务启动的前台通知。 该服务每秒调用一个用作GPS连接的类。 GPS类使用NETWORK_PROVIDERGPS_PROVIDER

到目前为止,所有工作都是正确的,除了今天发生的事情。

在某些时候,Android系统显示的消息说“除非你连接到wifi网络或移动网络,否则你将无法访问电子邮件和互联网”。 我不太清楚这条消息,但我有两个按钮:“取消”和“确定”。 从口袋里拿出手机时,我可能会点击某些东西。

在此消息之上是另一条消息,说我的应用程序不幸崩溃了。 所以事件的顺序似乎是这样的:网络禁用(?),应用程序崩溃。

我认为我需要以某种方式处理网络错误,但我现在无能为力,因为我无法从错误中获得太多信息。

有什么想法吗?

谢谢

您可以使用ConnectivityManager访问系统服务,然后使用NetworkInfo类来获取网络的连接状态,

检查网络是否可用的方法,

 private boolean isNetworkAvailable() { ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); boolean isAvailable = false; if (networkInfo != null && networkInfo.isConnected()) { isAvailable = true; } return isAvailable; } 

如果网络可用且已连接,则只继续执行应用程序。 否则退出应用程序,显示正确的错误消息。

  // Check if Internet is connected if (isNetworkAvailable()) { // Execution here } else { // Error message here if network is unavailable. Toast.makeText(this, "Network is unavailable!", Toast.LENGTH_LONG).show(); } 

不要忘记授予您的应用访问网络状态的权限,

  

更新:

“GPS有一个网络状态监听器,我认为应该使用,但我也无法测试。”

您可以通过这种方式从LocationManager检查您的网络状态,

 // Declaring a Location Manager protected LocationManager mLocationManager; boolean isNetworkEnabled = false; boolean isGPSEnabled = false; // Getting network status isNetworkEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

如果你想获得GPS状态,

 // Getting GPS status isGPSEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

您可以处理IOExceptionUnknownHostException

 try { ------------code------------ } catch(IOException e) { e.printStackTrace(); } catch(UnknownHostException e) { e.printStackTrace(); }