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

时间:2015-01-06 09:47:59

标签: java android gps

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

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

在某些时候,Android系统显示的信息类似于"除非您连接到wifi网络或移动网络,否则您将无法访问电子邮件和互联网"。 我不记得这条消息,但我有2个按钮:"取消"和"好的"。 从口袋里拿出手机时,我可能已经点击了一些东西。

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

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

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用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();
    }

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

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

<强>更新

&#34; GPS有一个网络状态监听器,我认为应该使用它,但我也无法测试。&#34;

您可以通过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);

答案 1 :(得分:0)

你可以处理 IOException &amp;的的UnknownHostException

try
{

 ------------code------------

}
catch(IOException e)
{
 e.printStackTrace();
}
catch(UnknownHostException e)
{
 e.printStackTrace();
}