Android Wifi广播接收器未按预期工作

Android Wifi广播接收器未按预期工作,android,broadcastreceiver,wifi,Android,Broadcastreceiver,Wifi,每当手机连接到新的WiFi网络时,我都必须获得WiFi ssid。我注册了以下 receiver `registerReceiver(this.mybroadcast, new IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));` 这部分代码工作得很好。但是在onReceive方法中 NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_

每当手机连接到新的WiFi网络时,我都必须获得WiFi ssid。我注册了以下

receiver `registerReceiver(this.mybroadcast, new IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));`
这部分代码工作得很好。但是在
onReceive
方法中

NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO));
始终返回null。我也尝试了
EXTRA\u NETWORK\u INFO
,但它也返回Null

我不能用

this.registerReceiver(this.mybroadcast, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));,
因为服务将在n分钟后停止/启动,使用它将在每次重新启动服务时生成事件

有什么办法可以解决这个问题吗?

您可以在活动中创建广播

第1步:

步骤2

步骤3


谢谢你的解决方案,我也有一个类似的。但问题是,我的代码每2分钟停止/启动一次服务。在这种情况下,事件每两分钟生成一次,有什么解决方法吗?谢谢我解决了这个问题,您的解决方案帮助我思考得更清楚!解决方案很好,但若在添加或更新网络时由于密钥错误导致连接失败怎么办?在这种情况下,“额外请求者”错误不起作用。是否有相关的解决方案?
 @Override
    public void onResume() {
        registerReceiver();
        super.onResume();
    }

 private void registerReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        registerReceiver(mReceiver, filter);
    }
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (info != null) {
                if (info.isConnected()) {
                    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                    String ssid = wifiInfo.getSSID();
                    if (ssid != null) {
                        if (isConnectClicked) {
                          //YOUR CONNECTED WITH WIFI

                                               } 
                                      }
                                         }

                               }
            } else {
                if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
                    if (intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)) {

                  //Connection failed    


                    }
                }
             }
          }

    };
 @Override
    public void onPause() {
        unregisterReceiver(mReceiver);
        super.onPause();
    }