我正在onResume()
注册接收器:
registerReceiver(wifiConnectivityReceiver, new
IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION));
这是接收器本身:
class WiFiConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED,false)){
Log.d(TAG,"Connected to network!");
} else {
Log.d(TAG,"Could not connect to network!");
}
}
}
在我的应用程序中,我能够连接到选定的WiFi网络,但此SUPPLICANT_CONNECTION_CHANGE_ACTION
永远不会被触发。如果我将其更改为SUPPLICANT_STATE_CHANGED_ACTION
,例如它正在运行。
我正在研究ICS 是否有其他人因此意图遇到这样的问题?
答案 0 :(得分:4)
我认为以下代码可以帮助您:
public void installMyReceiver(){
if (I) Log.i(TAG, "installMyReceiver() - Online");
mFlag = true;
myReceiver = new BroadcastReceiver(){
public void onReceive (Context context, Intent intent){
String action = intent.getAction();
if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)){
SupplicantState supplicantState = (SupplicantState)intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
if (supplicantState == (SupplicantState.COMPLETED)){
if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Connected");
//do something
}
if (supplicantState == (SupplicantState.DISCONNECTED)){
if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Disconnected");
//do something
}
}
}
};
IntentFilter mFilter = new IntentFilter (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
this.registerReceiver (myReceiver, mFilter);
}
这是获取所需信息然后执行某些操作的简单方法。 我希望它可以帮到你!
答案 1 :(得分:0)
是否有其他人因此意图遇到此类问题?
是的,我。似乎在某些设备上,操作系统从未声明该意图。 (是的,我在工厂重置了设备。)我最后还添加了一个看门狗计数器来检查WifiManager.isWifiEnabled()
以了解更改。当然,这总会有点延迟。
如果您这样做,请不要忘记再次从Runnable
中的Handler
删除回复到BroadcastReceiver
的同一个实例如果代码在 声明意图的设备上执行,则不处理事件两次。