以下の回答に従って編集し、マニフェストを次のように変更しました。
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17" />
作成されたメソッド:
@TargetApi(17)
private static boolean isAirplaneModeOn17(Context context) {
return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
}
ただし、プロジェクトをクリーンアップすると、「Settings.Global を解決できないか、フィールドではありません」というメッセージが引き続き表示されます。アイデア?
次のコードを使用して機内モードの状態を読み取るアプリがあります。
return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
これは、すべての GB および <= 4.1x の使用に最適です。
もちろん、API 17 では Settings.Global が導入され、この場所が変更されました。
return boolean airmode = Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 1;
API17 で機内モードの状態を取得するための回避策があるという事実はさておき、本当の問題は、同じプロジェクトからの Settings.System と Settings.Global の両方の読み取りをサポートするプロジェクトをどのようにコンパイルするかということです。
プロジェクトのビルド ターゲットが 4.2 API 17 以外に設定されている場合、「Settings.Global を解決できないか、フィールドではない」ことを Eclipse に「無視」させることができないようです。私の4.2ユーザーで、その指定を次のように設定します。
private static boolean isAirplaneModeOn(Context context) {
if (apiVersion < 17) {
return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
} else {
return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
}
}
マニフェストで最小およびターゲット API をいじりましたが、何の影響もないようです。Eclipse はまだプロジェクトをコンパイルしません。
FWIW、関連するバージョン情報は次のとおりです。
ADK 21.0.0.v201210310015-519525
Eclipse バージョン: 4.2.1 ビルド ID: M20120914-1800
ティア!