Как отключить AIRPLANE MODE планшет поддерживает 4.4.2

Я должен отключить AIRPLANE MODE а также DATE TIME SETTINGS в моем приложении, для этого я использовал эти намеренные фильтры, но none из них works для меня

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

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
           <action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
           <action android:name="android.settings.DATE_SETTINGS" />
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

Но раньше я успешно отключил Settings используя ниже intent-filter

        <intent-filter >
            <action android:name="android.settings.SETTINGS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

2 ответа

Решение

Что касается версии 4.2 и выше, вы не можете программно управлять режимом полета.

Вы можете сделать это, только если у пользователя есть рутированное устройство.

Как написано в API DOC:

"Некоторые настройки устройства, определенные Settings.System теперь read-only , Если ваше приложение пытается записать изменения в настройки, определенные в Settings.System, которые переместились в Settings.Global , операция записи будет молча провалиться при запуске на Android 4.2 и выше. Даже если ваша ценность для android:targetSdkVersion а также android:minSdkVersion ниже чем 17 Ваше приложение не может изменять параметры, которые были перемещены в Settings.Global при работе на Android 4.2 и выше."

TLDR: Не делай этого.

Подумайте, что произойдет, если пользователь не может включить режим полета, хотя он хочет / должен.
Важные системные настройки не могут быть изменены из вашего приложения.

Рекомендую:

  1. Убедитесь, что режим полета отключен или нет
  2. Если этот параметр включен, появится сообщение "Это приложение не работает в режиме полета. Открыть приложение настроек системы?" с диалогом "да / отмена"
  3. Закройте свое приложение и / или откройте приложение системных настроек

РЕДАКТИРОВАТЬ: это выглядит так:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void checkAirplaneMode() {
    int mode;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Log.v(TAG, "work with new api.");
        mode = Settings.Global.getInt(getActivity().getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, 0);
    } else {
        Log.v(TAG, "work with old api.");
        mode = Settings.System.getInt(getActivity().getContentResolver(),
                Settings.System.AIRPLANE_MODE_ON, 0);
    }
    Log.v(TAG, "airplane mode: " + mode);

    if(mode == 1 /* airplane mode is on */) {
        new AlertDialog.Builder(getActivity()).setTitle("Sorry!")
                .setMessage("This app doesn't work with Airplane mode.\n"
                        + "Please disable Airplane mode.\n")
                .setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
                        getActivity().finish();
                    }
                })
                .setNegativeButton("Close app", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        getActivity().finish();
                    }
                })
                .show();
    }
}

вот какой-то момент.

  • Проверьте Build.VERSION.SDK_INT использовать Settings.Global для новых устройств. Режим полета перенесен сюда.
  • Если режим == 1, устройство находится в режиме полета.
  • Настройка режима открытого самолета.
    startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
Другие вопросы по тегам