Как переключить режим полета на корневом устройстве?

Я использую следующий метод:

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)

где я ошибаюсь??Есть ли другой выход???


person user2014    schedule 30.12.2014    source источник
comment
stackoverflow.com/questions/15861046/ перейдите по этой ссылке   -  person Abhishek Chaubey    schedule 30.12.2014
comment
‹uses-permission android:name=android.permission.WRITE_SETTINGS /› и ‹uses-permission android:name=android.permission.WRITE_SECURE_SETTINGS /›добавили ли вы это разрешение   -  person Abhishek Chaubey    schedule 30.12.2014
comment
@AbhishekChaubey уже добавил это разрешение   -  person user2014    schedule 30.12.2014
comment
Вы читали stackoverflow.com/questions/13422527/?   -  person Pankaj Kumar    schedule 30.12.2014


Ответы (2)


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

Поместите String insted и не забудьте добавить разрешения

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

Надеюсь, это поможет вам

person Abhishek Chaubey    schedule 30.12.2014

Начиная с 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" />
person kalyan pvs    schedule 30.12.2014
comment
так ты имеешь в виду выше 4.2 я не могу изменить режим полета ?? И у меня есть рутированное устройство. - person user2014; 30.12.2014
comment
@ user2014 для корневого устройства, которое вы можете изменить. Проверьте здесь stackoverflow.com/questions/13766909/ - person kalyan pvs; 30.12.2014