【问题标题】:Android WiFi State ListenerAndroid WiFi 状态监听器
【发布时间】:2017-05-03 21:06:27
【问题描述】:

我是 Android 开发的新手。如何为 Activity 中的 WiFi 连接/断开连接设置监听器?它必须在 Activity 内部,因为我在其中设置了 UART 连接,并且需要将 WiFi 状态信息发送到 UART 设备。我用 BroadcastReceivers 尝试了一些东西,但失败了。这是我最后一次尝试:

private BroadcastReceiver myWifiReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE));
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if(networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
            if(networkInfo.isConnected()){
                Log.d("WIFI", "CONNECTED");
            }else{
                Log.d("WIFI", "DISCONNECTED");
            }
        }
}};

我可能还需要一些关于如何注册 BroadcastReceiver 的帮助,目前我正在 Activity 的 onResume 内进行此操作:

this.registerReceiver(this.myWifiReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

在onPause:

this.unregisterReceiver(myWifiReceiver);

编辑:

感谢Devunwired的回答我已经实现了我想要的,我将代码发布以供将来参考。

private BroadcastReceiver myWifiReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        SupplicantState newState = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);

        switch(newState){
            case ASSOCIATED:
                Log.d("WIFI", "CONNECTED");
                break;
            case DISCONNECTED:
                if(!disconnected){
                    Log.d("WIFI", "DISCONNECTED");
                    disconnected = true;
                }
        }
}};

我还将BroadcastReceiver 注册移动到onStart(因此将取消注册移动到onStop),因为onResume 并不总是被调用:

this.registerReceiver(this.myWifiReceiver, new IntentFilter(
        WifiManager.SUPPLICANT_STATE_CHANGED_ACTION));

【问题讨论】:

    标签: android broadcastreceiver android-wifi android-things


    【解决方案1】:

    根据您所说的“连接/断开连接”的含义,您可能没有观察到正确的广播操作。 ConnectivityManager.CONNECTIVITY_ACTION 在默认连接完全建立或丢失时触发。

    您可能对WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION 或WifiManager.SUPPLICANT_STATE_CHANGED_ACTION 更感兴趣,它们会随着 WiFi 无线电的关联状态变化而触发。

    我用 BroadcastReceivers 尝试了一些东西,但失败了

    如果上述操作不能满足您的需求,我鼓励您详细说明您遇到的失败。

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 2019-08-10
      • 1970-01-01
      • 2021-02-17
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多