1

我想使用 BroadcastReceiver 通知我的 Activity 任何 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() 方法。

4

2 回答 2

1

您无法使用 LocalBroadcastManager 接收 WifiManager.NETWORK_STATE_CHANGED_ACTION。LocalBroadcastManager 仅在您的进程中起作用。

帮助注册并向您的流程中的本地对象发送 Intent 广播。与使用 sendBroadcast(Intent) 发送全局广播相比,这具有许多优点:

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

你应该使用 Context 的 registerReceiver

于 2015-04-11T11:24:49.540 回答
1

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

这仅适用于通过发送的广播LocalBroadcastManager。它不适用于系统广播,尤其是其他进程发送的广播。

也许我正在监听的 WifiManager.NETWORK_STATE_CHANGED_ACTION 操作无法针对 LocalBroadcastManager 注册?

正确的。

于 2015-04-11T11:24:05.753 回答