【问题标题】:Android Wifi Receiver broadcast late responseAndroid Wifi Receiver 广播延迟响应
【发布时间】:2016-12-17 17:29:55
【问题描述】:

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

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

【问题讨论】:

  • 你可以试试STATE_CHANGE而不是WIFI_STATE_CHANGED吗?我不能 100% 确定它会减少时间,但在我的应用程序中我会使用它,所以不妨试一试
  • 另外,您能否在执行任务所需时间的确切位置发布日志?
  • 我认为它接收系统意图较晚。现在我尝试 STATE_CHANGE

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


【解决方案1】:

在注册接收器时,使用意图过滤器作为 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() 方法中取消注册()。如果您在 OnStart() 中注册意味着您需要取消注册在 OnStop() 方法中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2017-03-12
    • 2011-10-23
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多