Android Wifi Receiver播放迟到的回复

时间:2016-12-17 17:29:55

标签: android broadcastreceiver android-wifi android-broadcast android-broadcastreceiver

我已经完成了这个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秒或更多)。

我的错误在哪里?还有另一种不使用服务的方法吗?

1 个答案:

答案 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()方法中。