如何在Android上最有效地拦截与Wifi网络的连接

时间:2013-07-31 17:07:03

标签: android android-intent broadcastreceiver intentfilter wifimanager

我想在手机连接到某个WiFi网络时执行某些操作。 据我所知,我有2个广播意图拦截,将满足这个: 1. Wifi状态改变了。 2.连接性改变。

然而问题是我只想拦截Wifi连接事件。 目前我的接收器是在WiFi的任何变化时触发的,包括断开连接,我并不在乎。我觉得这是浪费CPU时间。

还有更具体的意图,比如“Wifi Connected”吗? 或者,我可以在意图过滤器中添加一些内容来实现这一目标吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过请求其额外信息来确定网络事件的类型。首先,请确保您在IntentFilter操作中注册WifiManager.NETWORK_STATE_CHANGED_ACTION并将其绑定到正确的BroadcastReceiver

然后在接收者的onReceive方法中,您可以检查收到的事件是否为NetworkInfo.State.CONNECTED事件:

@Override
public void onReceive(Context context, Intent intent) {    
  NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

  if (networkInfo != null 
     && networkInfo.getState().equals(NetworkInfo.State.CONNECTED) ) {
     // Do whatever you want
  }
}

答案 1 :(得分:0)

据我所知,无法按状态(已连接/已断开连接)或按网络名称过滤意图WifiManager.NETWORK_STATE_CHANGED_ACTION

太糟糕了:(