java - 防止网络不可用时应用程序崩溃

标签 java android gps

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

到目前为止一切正常,除了今天,直到发生了一些事情。

Android 系统有时会显示一条消息,内容类似“除非您连接到 wifi 网络或移动网络,否则您将无法访问电子邮件和互联网”。 我不太记得消息,但我有 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" />

更新:

“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);

关于java - 防止网络不可用时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27796001/

相关文章:

java - Android 开发字符串数组资源太大,导致 Android 应用程序崩溃!

java - 为基于 JVM 的项目创建助手 "scripts"

java - 无法捕获 servlet 中的主键异常

java - 如何在 REACT 的表单字段中获取正确的日期时间?

java - Android 手机上的 GPS 定位器错误

gps - 在寻找合适的 GPS 时遇到问题

android - 替换 google arcore 中的 3D 对象

android - ListView 项目的删除选项总是删除第一个项目,无论单击哪个项目

android - 以编程方式确定Android设备是否有菜单按钮的方法?

python - 自 Python 纪元以来的几周内的 GPS 时间?