バックグラウンドで Wi-Fi 接続を維持する必要があるアプリを作成しています。したがって、デバイスがスリープ状態になったときに、デバイスが Wi-Fi を自動的にシャットダウンしないようにすることが重要です。
したがって、デバイスの現在の Wi-Fi スリープ ポリシーを確認したいと思います。間違っている場合は、ユーザーにそのことを知らせ、適切な設定ページにリンクして変更できるようにしたいと思います。
これを行うために、次のコードを書きました。
@SuppressWarnings("deprecation")
@SuppressLint({ "InlinedApi", "NewApi" })
private void checkWiFiPolicy() {
ContentResolver cr = this.getContentResolver();
int apiLevel = 0;
try { apiLevel = Build.VERSION.SDK_INT; } catch (Exception e) {}
int apiIndWifiSleepPolicyDefault = -1;
int apiIndWifiSleepPolicyNever = -1;
int apiIndWifiSleepPolicyNeverWhilePlugged = -1;
int currentWifiPolicy = -10;
if (apiLevel < 17) {
apiIndWifiSleepPolicyDefault = Settings.System.WIFI_SLEEP_POLICY_DEFAULT;
apiIndWifiSleepPolicyNever = Settings.System.WIFI_SLEEP_POLICY_NEVER;
apiIndWifiSleepPolicyNeverWhilePlugged = Settings.System.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED;
try {
currentWifiPolicy = Settings.System.getInt(cr, android.provider.Settings.System.WIFI_SLEEP_POLICY);
} catch (Exception e) {}
} else {
apiIndWifiSleepPolicyDefault = Settings.Global.WIFI_SLEEP_POLICY_DEFAULT;
apiIndWifiSleepPolicyNever = Settings.Global.WIFI_SLEEP_POLICY_NEVER;
apiIndWifiSleepPolicyNeverWhilePlugged = Settings.Global.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED;
try {
currentWifiPolicy = Settings.Global.getInt(cr, android.provider.Settings.Global.WIFI_SLEEP_POLICY);
} catch (Exception e) {
e.printStackTrace();
}
}
if (currentWifiPolicy == apiIndWifiSleepPolicyDefault) {
ALog.d(ALog.TAG_ACTIVITY, "Detected WifiSleepPolicy: DEFAULT");
} else if (currentWifiPolicy == apiIndWifiSleepPolicyNever) {
ALog.d(ALog.TAG_ACTIVITY, "Detected WifiSleepPolicy: NEVER");
} else if (currentWifiPolicy == apiIndWifiSleepPolicyNeverWhilePlugged) {
ALog.d(ALog.TAG_ACTIVITY, "Detected WifiSleepPolicy: NEVER WHILE PLUGGED");
} else {
ALog.d(ALog.TAG_ACTIVITY, "Detected WifiSleepPolicy: UNKNOWN");
}
}
ただし、このコードは Nexus 7 (Android 4.3、Gen. 1) では失敗します。
W/System.err(5318): android.provider.Settings$SettingNotFoundException: wifi_sleep_policy
従来のアプローチ (apiLevel < 17 で使用するアプローチ) を試しても、まったく同じエラーが発生します。(System.Global.DATA_ROAMING などの他のシステム設定を読み取ることができることに注意してください)
Nexus 7 でこの設定を読み取る方法についてのアイデアはありますか?