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

Java 处理应用程序内WiFi状态的定期检查,java,android,multithreading,android-wifi,Java,Android,Multithreading,Android Wifi,Android应用程序编程新手,我有一个场景,我正在Android Studio中努力编写 我的应用程序要求用户连接到特定的Wifi。因此,我想定期检查Wifi状态,如果未连接/连接到错误的Wifi,我想弹出一个AlertDialog,直到用户连接到正确的Wifi 然而,我正在努力实现。到目前为止,我的方法是使用checkWifi方法来测试我们是否使用正确的Wifi,并相应地设置一个全局布尔值onCorrectWifi。此检查WiFi通过TimerTask定期运行,每30秒一次 在与checkW

Android应用程序编程新手,我有一个场景,我正在Android Studio中努力编写

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

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

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

我正在努力实现这一点

我是不是把事情弄得太复杂了?是否有更好/更简单的实现方法来实现整个检查Wifi状态,如果错误,则显示AlertDialog直到Wifi再次良好

我将使用BroadcaseReceiver捕捉Wifi连接更改事件。这样,您就不需要运行定期检查。见:

不确定您使用的是哪种类型的对话框,但如果您使用的是由AlertDialog.Builder生成的常规对话框,则不需要运行while循环来保持显示对话框。只需调用dialog.create.show即可显示它,并仅在建立了正确的Wifi连接时将其关闭。鉴于该场景,我将选择ProgressDialog或ProgressBar而不是AlertDialog


乍一看,你的方法似乎很合理,所以我不太确定出了什么问题。这就是说,安卓系统实际上已经具备了在网络状态发生变化时收到通知的功能,从而简化了这一场景

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

我的问题是,我无法让AlertDialog显示-显示相关代码,以及如何调用,即在永久运行的前台服务或活动中如何调用。如果这是唯一的问题,那么前面的4段就没有必要了?@Mark Keen,抱歉,我明白你的意思。我想我的首要问题是关于实际的实现。我将编辑我的问题以反映这一点。从Android PSo开始,使用BroadcastReceiver监听网络更改是不推荐的,只是为了澄清一下,这减少了定期检查Wifi状态的需要?与中一样,只有当Wifi状态从已连接->已断开连接更改时,才会触发回调,反之亦然?接下来的问题是,该对话框在哪里?每次连接或更改WiFi网络时,都会运行onAvailable回调方法。您可以选择定义另一种方法onLostNetwork network,该方法将在WiFi完全断开时运行。调用onAvailable时,检查网络是否为您想要的WiFi网络。如果不是,则显示对话框,否则,取消对话框。非常好,谢谢您的帮助!省去了与其他线程和诸如此类的麻烦。