Android的无线广播接收器工作不正常 [英] Android Wifi broadcast receiver not working as expected

查看:162
本文介绍了Android的无线广播接收器工作不正常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要得到的WiFi SSID,每当手机连接到新的WiFi网络。我注册了以下

 接收器`registerReceiver(this.mybroadcast,新的IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));`
 

的code这部分完美的作品。但在的onReceive 方法

 的NetworkInfo信息= intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO));
 

总是返回null。我试过 EXTRA_NETWORK_INFO 为好,但它也返回null。

我不能使用

  this.registerReceiver(this.mybroadcast,新的IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));,
 

作为服务将停止/启动n分钟后使用,这将产生对服务的每次重新启动时。

任何想法,我怎么能解决这个问题呢?

解决方案

您可以在活动中创建广播

  

第1步:

  @覆盖
    公共无效onResume(){
        registerReceiver();
        super.onResume();
    }

 私人无效registerReceiver(){
        IntentFilter的过滤器=新的IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        registerReceiver(mReceiver,过滤器);
    }
 

  

第2步

 私人的BroadcastReceiver mReceiver =新的BroadcastReceiver(){
        @覆盖
        公共无效的onReceive(上下文的背景下,意图意图){

            的NetworkInfo信息= intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            如果(资讯!= NULL){
                如果(info.isConnected()){
                    WifiManager wifiManager =(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                    串SSID = wifiInfo.getSSID();
                    如果(SSID!= NULL){
                        如果(isConnectClicked){
                          //你跟WIFI

                                               }
                                      }
                                         }

                               }
            } 其他 {
                如果(intent.getAction()。等于(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)){
                    如果(intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)){

                  //连接失败


                    }
                }
             }
          }

    };
 

  

第3步

  @覆盖
    公共无效的onPause(){
        unregisterReceiver(mReceiver);
        super.onPause();
    }
 

I have to get the WiFi ssid whenever phone connects to new WiFi network. I registered the following

receiver `registerReceiver(this.mybroadcast, new IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));`

This part of code works perfectly. But in onReceive method,

NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO));

always returns null. I tried EXTRA_NETWORK_INFO as well, but it also returns Null.

I can't use

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

as the service will stop/start after n minutes and using this will generate the event on every restart of service.

Any ideas that how can I solve this issue?

解决方案

You can create broadcast within the activity

Step 1 :

 @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);
    }

Step 2

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    


                    }
                }
             }
          }

    };

Step 3

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

这篇关于Android的无线广播接收器工作不正常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆