我想使用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()方法永远不会被触发。
答案 0 :(得分:0)
由于此广播位于应用程序内,因此我尝试使用效率更高的LocalBroadcastManager对象。
仅适用于您通过LocalBroadcastManager
发送的广播。它不适用于系统广播,特别是那些由其他进程发送的广播。
我正在侦听的WifiManager.NETWORK_STATE_CHANGED_ACTION操作可能无法针对LocalBroadcastManager进行注册?
正确。
答案 1 :(得分:0)
您无法通过LocalBroadcastManager接收WifiManager.NETWORK_STATE_CHANGED_ACTION。 LocalBroadcastManager仅适用于您的流程。
帮助注册并向本地对象发送Intent广播 在你的过程中。这比发送有许多优点 sendBroadcast(Intent)的全局广播:
- 您知道您播放的数据不会离开您的应用,因此不必担心泄露私人数据。
- 其他应用程序无法将这些广播发送到您的应用,因此您不必担心出现安全漏洞 他们可以利用。
- 它比通过系统发送全球广播更有效。
你应该使用Context的registerReceiver