我有一个IntentService ,它应该在打开 WiFi后执行一些任务。
我正在使用BroadcastReceiver来WifiManager.WIFI_STATE_CHANGED_ACTION
监听 WiFi 的变化。
问题:
当我通过BroadcastReceiver打开 WiFi 时wifiManager.setWifiEnabled(true)
,只接收状态和. 然后在接收到实际状态之前销毁IntentService 。WifiManager.WIFI_STATE_DISABLED
WifiManager.WIFI_STATE_ENABLING
WifiManager.WIFI_STATE_ENABLED
如果我把它放在Thread.sleep(2000)
最后onHandleIntent()
它有效,但必须有更好的解决方案?
问题:
- 为什么
WifiManager.WIFI_STATE_DISABLED
我打电话时会广播状态wifiManager.setWifiEnabled(true)
? - 我怎样才能让
onHandleIntent()
方法等到状态WifiManager.WIFI_STATE_ENABLED
被检索到?
代码:
public class BackupService extends IntentService {
private BroadcastReceiver mWifiStateChangedReceiver;
public BackupService() {
super("BackupService");
}
@Override
protected void onHandleIntent(Intent intent) {
final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
mWifiStateChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int wifiState = intent.getIntExtra(
WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
if (wifiState == WifiManager.WIFI_STATE_ENABLED) {
// PERFORM TASK...
}
}
};
registerReceiver(mWifiStateChangedReceiver, new IntentFilter(
WifiManager.WIFI_STATE_CHANGED_ACTION));
wifiManager.setWifiEnabled(true);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mWifiStateChangedReceiver != null) {
unregisterReceiver(mWifiStateChangedReceiver);
}
}
}