LocalBroadcastManager能否检测到WifiManager.NETWORK_STATE_CHANGED_ACTION更改?

时间:2015-04-11 11:04:18

标签: android android-intent wifimanager localbroadcastmanager

我想使用BroadcastReceiver通知我的活动有关任何Wifi连接的更改。由于此广播在应用程序内,我正在尝试使用更高效的LocalBroadcastManager对象。

但无论我做什么,BroadcastReceiver.onReceive()方法都不会触发。我可能错误地连接了它,或者我正在侦听的WifiManager.NETWORK_STATE_CHANGED_ACTION操作无法针对LocalBroadcastManager进行注册?任何帮助或澄清将不胜感激。

这是我的Activity类的示例,其中包含所有逻辑。

public class MyActivity extends ActionBarActivity {

private BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
        {
            // Do something
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    IntentFilter wifiStatusIntentFilter = new IntentFilter();
    wifiStatusIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    wifiStatusIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    LocalBroadcastManager.getInstance(this).registerReceiver(wifiReceiver, wifiStatusIntentFilter);
}

protected void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(wifiReceiver);
}

protected void onResume() {
    super.onResume();

    IntentFilter wifiStatusIntentFilter = new IntentFilter();
    wifiStatusIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    LocalBroadcastManager.getInstance(this).registerReceiver(wifiReceiver, wifiStatusIntentFilter);
}

}

当我打开和关闭手机上的wifi或进入和离开wifi范围时,onReceive()方法永远不会被触发。

2 个答案:

答案 0 :(得分:0)

  

由于此广播位于应用程序内,因此我尝试使用效率更高的LocalBroadcastManager对象。

仅适用于通过LocalBroadcastManager发送的广播。它不适用于系统广播,特别是那些由其他进程发送的广播。

  

我正在侦听的WifiManager.NETWORK_STATE_CHANGED_ACTION操作可能无法针对LocalBroadcastManager进行注册?

正确。

答案 1 :(得分:0)

您无法通过LocalBroadcastManager接收WifiManager.NETWORK_STATE_CHANGED_ACTION。 LocalBroadcastManager仅适用于您的流程。

  

帮助注册并向本地对象发送Intent广播   在你的过程中。这比发送有许多优点   sendBroadcast(Intent)的全局广播:

     
      
  • 您知道您播放的数据不会离开您的应用,因此不必担心泄露私人数据。
  •   
  • 其他应用程序无法将这些广播发送到您的应用,因此您不必担心出现安全漏洞   他们可以利用。
  •   
  • 它比通过系统发送全球广播更有效。
  •   

你应该使用Context的registerReceiver