网络不可用时防止应用崩溃
我有一个应用程序,它具有从服务启动的前台通知。 该服务每秒调用一个用作GPS连接的类。 GPS类使用NETWORK_PROVIDER
和GPS_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);
您可以处理IOException和UnknownHostException
try { ------------code------------ } catch(IOException e) { e.printStackTrace(); } catch(UnknownHostException e) { e.printStackTrace(); }