我已经完成了这个wifi接收器,我希望在启用wifi时执行操作...
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
WifiManager wManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
if (isWifiEnabled(wManager)) {
new MyTask().execute();
}
}
public static boolean isWifiEnabled(WifiManager wifi) {
if (wifi==null) return false;
if (wifi.getWifiState()!= wifi.WIFI_STATE_ENABLED) return false;
return true;
}
}
......这是接收器的清单......
<receiver android:enabled="true" android:name=".receiver.WifiReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
...但是接收器从wifi切换中执行任务太晚(大约10-60秒或更多)。
我的错误在哪里?还有另一种不使用服务的方法吗?
答案 0 :(得分:1)
注册接收器时使用intent过滤器作为WifiManager.WIFI_STATE_CHANGED_ACTION
BroadcastReceiver wifiStateChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
//your code
}
}
};
您需要在Oncreate或Onstart方法中注册您的广播接收器
wifiStateChangeFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(wifiStateChangeReceiver, wifiStateChangeFilter);
但请确保在完成工作后取消注册接收器。如果您在oncreate()方法中注册,则需要在onDestroy()方法中注册unRegister()。如果您在OnStart()中注册意味着您需要取消注册在OnStop()方法中。