处理app内定期检查WiFi状态

时间:2018-05-29 22:30:06

标签: java android multithreading android-wifi

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

我的应用要求用户连接到特定的Wifi。所以我想定期检查Wifi状态,如果它没有连接/连接到错误的Wifi,我想抛出一个AlertDialog,直到用户连接到正确的Wifi。

然而,我正在努力实施。到目前为止,我的方法是使用方法checkWifi()来测试我们是否使用正确的Wifi,并相应地设置全局布尔值onCorrectWifi。这个checkWifi()通过TimerTask定期运行,每30秒运行一次。

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

我正在努力实现这一目标。

我为自己制作的这个太复杂了吗?是否有一个更好/更简单的实现,将实现整个"检查Wifi状态,如果错误,显示AlertDialog直到Wifi再次良好"概念

2 个答案:

答案 0 :(得分:1)

初看起来,你的方法似乎很合理,所以我不太清楚出了什么问题。话虽这么说,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
);

答案 1 :(得分:0)

  • 我会使用BroadcaseReceiver来捕获Wifi连接更改事件。这样,您就不需要运行定期检查。 (见:How to detect when WIFI Connection has been established in Android?

  • 不确定您使用的是哪种Dialog,但如果您使用的是AlertDialog.Builder构建的常规对话框,则无需运行while循环即可继续显示对话框。只需拨打dialog.create().show()即可显示并仅在建立正确的Wifi连接时将其关闭。鉴于该方案,我将选择ProgressDialogProgressBar而不是AlertDialog