java - 处理应用程序内 WiFi 状态的定期检查

标签 java android multithreading android-wifi

Android 应用程序编程新手,我遇到了一个很难在 Android Studio 中编写代码的场景。

我的应用程序要求用户连接到特定的 Wifi。因此,我想定期检查 Wifi 状态,如果未连接/连接到错误的 Wifi,我想抛出一个 AlertDialog 直到用户连接到正确的 Wifi。

但是,我在实现方面遇到了困难。到目前为止,我的方法是使用一个方法 checkWifi() 来测试我们是否使用正确的 Wifi,并相应地设置一个全局 boolean 值 onCorrectWifi。此 checkWifi() 通过 TimerTask 每 30 秒定期运行一次。

在与 checkWifi() 方法相同的 TimerTask 中,有另一个名为 handleWifiStatus() 的方法。 handleWifiStatus() 方法查看 onCorrectWifi,如果它为 True,则不执行任何操作。如果 onCorrectWifi 为 False,handleWifiStatus() 会生成一个 AlertDialog,然后进入 while 循环。 while 循环重复调用 checkWifi() 直到 onCorrectWifi 再次为 True,此时退出 while 循环,并关闭 AlertDialog,并恢复通常的应用 Activity 。

我正在努力解决这个问题。

我是不是把这件事搞得太复杂了?是否有更好/更简单的实现来实现整个“检查 Wifi 状态,如果错误,显示 AlertDialog 直到 Wifi 再次良好”的概念?

最佳答案

乍一看,您的方法似乎很合理,所以我不太确定出了什么问题。话虽这么说,Android 实际上具有在网络状态发生变化时收到通知的功能,以简化这种情况。

// Retrieve the ConnectivityManager via the current Context
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

// Create the method to be called when the WiFi network changes
ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
        // Check that this Network is the correct one and take
        // action as appropriate
    }
};

// Set the callback to be fired when WiFi status changes
cm.registerNetworkCallback(
     new NetworkRequest.Builder()
     .addTransportType(TRANSPORT_WIFI)
     .build(),
     callback
);

关于java - 处理应用程序内 WiFi 状态的定期检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593892/

相关文章:

java - 在 Spring-test 集成测试中 Autowiring HttpServletRequest

c++ - 每秒轮询一次QT中的变量

java - 使用列表参数调用存储过程

java - 枚举和注解

Android 设备性能评估技术

android - 覆盖 RelativeLayout 的 onMeasure() 以限制其纵横比

ruby - 在主线程中创建无限循环,同时在派生线程中创建无限循环

php - Pthread for PHP问题

java - 如何使用 ExecutorCompletionService

android - 无法访问androidx.lifecycle.LifecycleOwner,Android中error是什么意思?