WiFiがオンになった後にいくつかのタスクを実行する必要があるIntentServiceがあります。
BroadcastReceiverをオンにしてWifiManager.WIFI_STATE_CHANGED_ACTIONWiFiの変更をリッスンしています。
問題:
BroadcastReceiverwifiManager.setWifiEnabled(true)経由でWiFiをオンにすると、状態とがのみ受信されます。次に、実際の状態を受信する前に、 IntentServiceが破棄されます。WifiManager.WIFI_STATE_DISABLEDWifiManager.WIFI_STATE_ENABLINGWifiManager.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);
}
}
}