WIFI变更的广播行动

时间:2017-09-02 08:29:56

标签: android android-broadcast

在我的应用程序中,我必须在设备连接或断开WIFI网络时收到通知。为此,我必须使用BroadcastReceiver,但在阅读了不同的文章和问题后,我有点困惑,我应该使用哪种广播操作。在我看来,我有三个选择:

为了减少资源,我真的只希望在设备CONNECTED到WIFI网络时(并且它已收到IP地址)或设备从一个设备DISCONNECTED时收到通知。我不关心其他状态,如CONNECTING等。

那么您认为我应该使用的最佳广播动作是什么?我是否必须对事件进行手动过滤(因为我在CONNECTED中接受了更多DISCONNECTEDonReceive)?

编辑:正如我在下面的评论中所指出的,我认为SUPPLICANT_CONNECTION_CHANGE_ACTION对我来说是最好的选择,但我的申请从未被解雇或收到过。 Others对此广播有同样的问题,但从未提出真正的解决方案(实际上使用了其他广播)。有什么想法?

2 个答案:

答案 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
    }      
}