1

私は次の方法を使用しています:

private void toggleAirplaneMode() throws Exception {        
    // read the airplane mode setting
    boolean isEnabled = android.provider.Settings.System.getInt(
          getContentResolver(), 
          android.provider.Settings.Global.AIRPLANE_MODE_ON, 0) == 1;

    // toggle airplane mode
    android.provider.Settings.System.putInt(
          getContentResolver(),
          android.provider.Settings.Global.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

    // Post an intent to reload
    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
    intent.putExtra("state", !isEnabled);
    sendBroadcast(intent);
}

そして、次の例外を取得します:

12-30 09:49:05.875: D/tag(5876): android.os.Parcel.readException(Parcel.java:1540)
12-30 09:49:05.875: D/tag(5876): android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
12-30 09:49:05.875: D/tag(5876): android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
12-30 09:49:05.875: D/tag(5876): android.content.ContentProviderProxy.call(ContentProviderNative.java:643)
12-30 09:49:05.875: D/tag(5876): android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1094)
12-30 09:49:05.876: D/tag(5876): android.provider.Settings$Global.putStringForUser(Settings.java:6827)
12-30 09:49:05.876: D/tag(5876): android.provider.Settings$Global.putString(Settings.java:6811)
12-30 09:49:05.876: D/tag(5876): android.provider.Settings$Global.putInt(Settings.java:6905)

どこが間違っているのですか??他に方法はありますか???

4

2 に答える 2

1
// 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();

文字列を int に挿入し、アクセス許可を追加することを忘れないでください

   <uses-permission android:name="android.permission.WRITE_SETTINGS" />
   <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

それがあなたを助けることを願っています

于 2014-12-30T10:16:09.080 に答える
1

Android 4.2 から、機内モードの変更意図はシステム アプリのみが変更できるように保護されているため、他のアプリでは機能しません。

詳細については、この機内モードの意図を確認してください

4.2未満では、機内モードを次のように変更できます

次のような機内モードのステータスを取得できます

public static boolean isAirplaneModeOn(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        return Settings.System.getInt(context.getContentResolver(),
                Settings.System.AIRPLANE_MODE_ON, 0) != 0;
    } else {
        return Settings.Global.getInt(context.getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
    }
}

次のように機内モードを変更できます

@SuppressWarnings("deprecation")
public static void switchAeroplaneMode(Context context, boolean isEnabled) {
    if (isEnabled == isAirplaneModeOn(context)) {
        return;
    }
    if (isAeroplaneModeSupports()) {
        Settings.System.putInt(context.getContentResolver(),
                Settings.System.AIRPLANE_MODE_ON, isEnabled ? 1 : 0);

        // Post an intent to reload.
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", !isEnabled);
        context.sendBroadcast(intent);
    }
}

public static boolean isAeroplaneModeSupports() {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1;
}

そして、マニフェストに許可を追加します

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
于 2014-12-30T10:16:21.677 に答える