在我的应用程序中,我必须在设备连接或断开WIFI网络时收到通知。为此,我必须使用BroadcastReceiver
,但在阅读了不同的文章和问题后,我有点困惑,我应该使用哪种广播操作。在我看来,我有三个选择:
为了减少资源,我真的只希望在设备CONNECTED
到WIFI网络时(并且它已收到IP地址)或设备从一个设备DISCONNECTED
时收到通知。我不关心其他状态,如CONNECTING
等。
那么您认为我应该使用的最佳广播动作是什么?我是否必须对事件进行手动过滤(因为我在CONNECTED
中接受了更多DISCONNECTED
和onReceive
)?
编辑:正如我在下面的评论中所指出的,我认为SUPPLICANT_CONNECTION_CHANGE_ACTION
对我来说是最好的选择,但我的申请从未被解雇或收到过。 Others对此广播有同样的问题,但从未提出真正的解决方案(实际上使用了其他广播)。有什么想法?
答案 0 :(得分:1)
请尝试
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction("android.net.wifi.STATE_CHANGE");
registerReceiver(networkChangeReceiver, filter);
}
@Override
protected void onDestroy() {
unregisterReceiver(networkChangeReceiver);
super.onDestroy();
}
和
BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (!AppUtils.hasNetworkConnection(context)) {
showSnackBarToast(getNetworkErrorMessage());
}
}
};
我正在使用它,它对我有用。希望它会帮助你。
答案 1 :(得分:1)
你可以去WifiManager.NETWORK_STATE_CHANGED_ACTION works.
使用WifiManager.NETWORK_STATE_CHANGED_ACTION
动作注册接收器,无论是在Manifest,Fragment还是Activity中,都适合您。
覆盖接收方:
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
boolean connected = info.isConnected();
if (connected)
//call your method
}
}