Android 4.2 でフライト モードを無効または有効にする方法はありますか?
以前の Android バージョンでのみ機能する次のコードを使用します。
android.provider.Settings.System.putInt(
c.getContentResolver(),
android.provider.Settings.System.AIRPLANE_MODE_ON, enable ? 0 : 1
);
これは、ファームウェア署名キーによって署名されたアプリ、またはシステムパーティションにインストールされたアプリ(通常はroot化されたデバイスユーザー)を除いて、もはや不可能です。
Official Android 4.2 API Documentationに書かれているように、できません
によって定義された一部のデバイス設定
Settings.System
が読み取り専用になりました。Settings.System
に移動した で定義された設定にアプリが変更を書き込もうとするとSettings.Global
、Android 4.2 以降で実行している場合、書き込み操作は警告なしで失敗します。android:targetSdkVersion
and の値が 17 未満であっても、アプリはAndroid 4.2 以降での実行時にandroid:minSdkVersion
移行された設定を変更できません。Settings.Global
ただし、OS 開発者の場合は、これらのアクセス許可を設定すると、それを書き込むことができます。
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
それから、書くことと読むこと、
// To Write
Settings.Global.putString(getContentResolver(), "airplane_mode_on", "1");
// To Read
String result = Settings.Global.getString(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON);
Toast.makeText(this, "result:"+result, Toast.LENGTH_SHORT).show();
KitKat の場合android:sharedUserId="android.uid.system"
、マニフェスト ファイルに追加する必要があります。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.airplanesetting"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="android.uid.system" >