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