Включение режима самолета через АБР

Я посмотрел повсюду, и я не нашел конкретного ответа на этот вопрос. Я надеюсь найти способ переключить режим самолета из АБР, который никак не связан с графическим интерфейсом. Я нашел и использовал метод, вызывающий меню, а затем используя keyevents включает режим полета, но из-за необходимости учитывать возможные изменения в макете пользовательского интерфейса, этот метод является лишь временным решением.

Я начинаю думать, что нет способа просто включить или выключить режим полета с помощью намерения, но если у вас есть какая-либо информация, я бы очень признателен.

Ответы

Ответ 1

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

Мне нравится первый ответ G murali, который предлагает следующее, чтобы включить режим самолета:

adb shell settings put global airplane_mode_on 1

К сожалению, он не работает. Он просто изменяет состояние значка режима самолета, но все радиостанции все еще активны.

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

Чтобы включить режим полета, используйте следующие команды:

adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE

Чтобы отключить режим полета, вы должны изменить настройку на 0 и снова передать намерение:

adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE

Он протестирован и работает на Android 6.


Примечание

Многие ответы предлагают использовать активность, чтобы открыть настройки режима самолета, а затем имитировать некоторые нажатия клавиш для навигации по пользовательскому интерфейсу. Я не рекомендую полагаться на это. На устройстве может быть только небольшое отставание, и клавиши будут нажаты до того, как откроется диалоговое окно настроек или, например, пока покажется неожиданное диалоговое окно. В обоих случаях нажатия клавиш вызывают что-то непреднамеренное, возможно, вредное.

Также пользовательский интерфейс может отличаться на устройствах различных марок, моделей, версий Android и т.д. Я тестировал его на Samsung Galaxy S4 (Android 6.0.1), и он там не работал. Это может быть разница между Samsung и пользовательским интерфейсом по умолчанию.

Метод настройки параметров должен быть абсолютно безопасным.

Ответ 2

Для включения режима APN

adb shell settings put global airplane_mode_on 1

Чтобы отключить режим APN

adb shell settings put global airplane_mode_on 0 

проверено на Android-L

Ответ 3

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 19 & adb shell input keyevent 23

Ответ 4

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS & adb shell input keyevent KEYCODE_ENTER & adb shell input keyevent 4

Будет переключен режим полета. Однако кто-нибудь знает, есть ли способ явно снять или снять флажок? Проблема в том, что я не могу найти способ проверить состояние перед переключением. adb shell settings get global airplane_mode_on не работает для меня, настройки не найдены.

Ответ 5

Вот как я смог включить режим полета на эмуляторе (API 25), преодолевая проблему с разрешением.

adb -s emulator-5554 shell settings put global airplane_mode_on 1
adb -s emulator-5554 shell 'su 0 am broadcast -a android.intent.action.AIRPLANE_MODE'

Обратите внимание, что ваш " su 0" может отличаться. Например, для более старого api мне пришлось использовать " su &

Если в случае, если вы хотите отключить только данные на эмуляторе, используйте

svc data disable

Однако я видел случаи, когда эмулятор автоматически восстанавливается через несколько секунд.

Ответ 6

выключить Режим полета:

if [[ "$(adb shell dumpsys wifi | grep mAirplaneModeOn)" == "mAirplaneModeOn true" ]]; then  

    adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
        && input keyevent 19
        && input keyevent 23
        && input keyevent 4
fi

включить режим полета:

if [[ "$(adb shell dumpsys wifi | grep mAirplaneModeOn)" == "mAirplaneModeOn false" ]]; then            

    adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
        && input keyevent 19
        && input keyevent 23
        && input keyevent 4
fi

Ответ 7

Перепишите решение @Dawid Ferenczy:

Включить APN

 adb shell settings put global airplane_mode_on 1
 adb shell am broadcast -a android.intent.action.AIRPLANE_MODE

Отключить APN

   adb shell settings put global airplane_mode_on 0
   adb shell am broadcast -a android.intent.action.AIRPLANE_MODE

Ответ 8

работал только на рутованном устройстве. ,

включить режим самолета:

Настройки оболочки adb -c выставить глобальный plane_mode_on 1

Оболочка adb -c am вещание -a android.intent.action.AIRPLANE_MODE --ez состояние true

отключить режим полета:

настройки оболочки adb -c выставить глобальный plane_mode_on 0

Оболочка adb -c am вещание -a android.intent.action.AIRPLANE_MODE --ez состояние false

Ответ 9

Используйте следующую команду для запуска "Настройки" > "Беспроводные сети", переключения режима полета и возврата (путем нажатия "Назад" ):

  • Windows/DOS: adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS & adb shell input keyevent 19 & adb shell input keyevent 23 & adb shell input keyevent 4
  • Unix/Linux: adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS ; adb shell input keyevent 19 ; adb shell input keyevent 23 ; adb shell input keyevent 4

Протестировано на Samsung Galaxy S (Android OS 2.3.3).

Ответ 10

william answer был самым близким, который работал у меня → Android 5.0 Lollipop. Однако иногда он не переключался, потому что он пытался переключиться до того, как активность настроек была полностью загружена.

Итак, я заставил терминал спать на 0,1 секунды. и я добавил, что ударил спину, чтобы выйти из настроек

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 19 ; sleep 0.1; adb shell input keyevent 23; sleep 0.3; adb shell input keyevent 4;
echo "Toggled airplane mode";

Ответ 11

Для более новых Android это en/отключает Wi-Fi. Не совсем ваша задача, но я был бы рад найти ее здесь:

adb shell svc wifi disable

или же

adb shell svc wifi enable

Кредит идет на этот ответ: fooobar.com/questions/9358887/...

Ответ 12

Так как команды трансляции перестали работать после Nougat, я бы рекомендовал использовать что-то вроде этого:

adb shell "ввод ключевого события KEYCODE_WAKEUP; ввод ключевого события KEYCODE_MOVE_HOME; начало am -a android.settings.AIRPLANE_MODE_SETTINGS; сон 0,5; ввод ключевого события KEYCODE_ENTER;

Это работает на Samsung S7

Ответ 13

Рабочий метод, который я использую в моей Mobile Automation Framework:

Работал с ОС 5.х 6.х 7.х и 8.х нужно проверить его на 9.х

/**
 * Method to set Android device Airplane mode.
 * 
 * @param status
 * 
 *               true - turn on airplane mode false - turn off airplane mode
 */
public static void setAndroidDeviceAirplaneMode(boolean status) {
    try {

        String airplaneModeStatus = "";
        if (status) {
            airplaneModeStatus = "0";
        } else {
            airplaneModeStatus = "0";
        }
        String sdkPath = System.getenv("ANDROID_HOME") + "/platform-tools/";
        Runtime.getRuntime().exec(sdkPath + "adb shell settings put global airplane_mode_on " + airplaneModeStatus);
        Thread.sleep(1000);
        Process process = Runtime.getRuntime()
                .exec(sdkPath + "adb shell am broadcast -a android.intent.action.AIRPLANE_MODE");
        process.waitFor();
        Thread.sleep(4000);
        if (status) {
            logger.info("Android device Airplane mode status is set to ON");
        } else {
            logger.info("Android device Airplane mode status is set to OFF");
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
        logger.error("Unable to set android device Airplane mode.");
    }
}

Ответ 14

Если телефон рутирован, то вы можете использовать эту команду. Также, если вы используете Magisk, shell должен иметь разрешение "su"

Включить режим полета

Оболочка adb -s ZY32234G3V "su -c 'ввод ключевого события KEYCODE_WAKEUP; ввод ключевого события KEYCODE_MOVE_HOME; настройки выставить глобальный plane_mode_on 1; вещать -a android.intent.action.AIRPLANE_MODE --ez состояние true' '

Отключить режим полета

Оболочка adb -s ZY32234G3V "su -c 'ввод ключевого события KEYCODE_WAKEUP; ввод ключевого события KEYCODE_MOVE_HOME; настройки выставить глобальный plane_mode_on 0; am широковещательная -a android.intent.action.AIRPLANE_MODE --ez состояние false'"