отключить запрос PIN-кода после авиарежима

При включении телефона по умолчанию предлагается ввести PIN-код SIM-карты, что является хорошей мерой безопасности, чтобы не допустить, чтобы «незнакомцы» нанесли вам расходы. Теперь то же самое при возврате из авиарежима: нужно снова вводить SIM-PIN. Что делает некоторые энергосберегающие устройства бесполезными: если приложение, например, переходит в режим полета при потере сигнала (см. Что такое режим ожидания сотовой связи и как я могу предотвратить его потребление батареи? ), оно не сможет вернуться к нормальной работе без вмешательства пользователя. .

Я ищу способ выборочно отключить это: активировать запрос PIN-кода при включении устройства, но не запрашивать PIN-код SIM-карты при выходе из режима полета.

Пожалуйста, не путайте это с "keyguard": я не спрашиваю о блокировке экрана (PIN/шаблон/пароль). Здесь я знаю свой путь, так как есть API для использования приложениями (так что я могу, например, временно отключить это с помощью Tasker ).

Я знаю, что это работает с устройствами Samsung, но я предпочитаю независимое от устройства решение, которое работает для всех производителей.

Действительно! Позвольте мне процитировать вопрос выше: я ищу способ выборочно отключить это , а не полностью отключить проверку. Я знаю, что его можно полностью отключить (что я и использую в настоящее время), но я хочу отключить его только для возврата из режима полета, а не для запуска устройства.

Ответы (3)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

  1. Для этого нужен рут. Нет пути вокруг этого.
  2. Ваше устройство должно работать под управлением Android 4.1+
  3. Этот обходной путь может быть слишком сложным для некоторых пользователей. Старайтесь применять его только тогда, когда знаете, что делаете.
  4. Я не несу ответственности, если что-то пойдет не так или во время процесса начнется Рагнарёк. Вы делаете это на свой страх и риск. Продолжить с осторожностью.
  5. Я не являюсь автором или иным образом связан с каким-либо из упомянутых модов. Я просто нашел это и делюсь им для вашей пользы.

ВРЕМЕННОЕ РЕШЕНИЕ

Я нашел обходной путь для проблемы, который прекрасно работает на Samsung Galaxy S2 с установленным Cyanogenmod 10.2 и Dorimanx Kernel 9.41. Необходимые шаги заключаются в следующем:

  1. Убедитесь, что ваше устройство рутировано.

  2. Загрузите и установите установщик Xposed Framework .

  3. Когда Xposed попросит root где-нибудь в ближайшем будущем, предоставьте его .

  4. Откройте приложение и нажмите Framework-Tab.

  5. Щелкните Install/Update.

  6. Перезагрузка .

  7. Загрузите и установите Jelly Bean 4.x Помощник по режиму полета .

  8. Откройте Xposed Framework Installer-App еще раз и выберите Modules.

  9. Отметьте (установить активным) Jelly Bean 4.x Airplane Mode Helper.

  10. Перезагрузка .

  11. Открыть Jelly Bean 4.x Airplane Mode Helper.

  12. Отметьте (установить активным) Enabled .

  13. Перезагрузка .

Вот и все! Режим полета должен снова работать, как и в предыдущих версиях Android, и больше не запрашивает PIN-код SIM-карты при выключении. Тем не менее, это все еще происходит при запуске, что обеспечивает безопасность вашей SIM-карты. Я настроил автоматическую процедуру экономии заряда батареи с помощью профилей местоположения ламы , аналогичную описанной здесь (спасибо, Иззи), и она работает безупречно.

Удачи, ребята!

Большое спасибо за ваш ответ! Я только что отредактировал его, чтобы улучшить форматирование (списки) и добавил, что для этого требуется JB+. Поскольку мои устройства еще не работают с JB, я не могу его протестировать, но я подозреваю, что вы могли пропустить самую важную часть вопроса (по крайней мере, вы не упомянули об этом): запрашивает ли он SIM-PIN при возвращении из самолета. режим - или это можно пропустить таким образом?
Будьте уверены, я полностью понял вашу проблему, и мой ответ именно то, что вы искали ;) - он не запрашивает PIN-код SIM-карты при выходе из режима полета, но он все еще запрашивает при загрузке. Таким образом, ваша безопасность сохраняется, но ваш скрипт экономии заряда батареи снова работает. Спасибо за обновление форматирования!
Я добавил самую важную информацию, поскольку вы были правы — я совершенно забыл упомянуть тот факт, что это фактически устраняет необходимость снова разблокировать вашу SIM-карту после режима полета.
В данном случае это именно то, к чему я стремился: автоматизированные задания работают без ручного вмешательства, но устройство по-прежнему защищено, когда дело доходит до «инициализации» (т. е. после загрузки). Отлично! Я пока голосую за это. Поскольку я также не могу протестировать решение t0mm13b, я должен доверять вам в отношении моего «принятия»: это выглядит как наиболее многообещающее (и бесплатное!) Решение на данный момент, хотя оно ограничено JB+.
Знаешь, забавно, как я вообще туда попал. Я нашел ваш вопрос и ответ на проблему с режимом ожидания сотовой связи и вскоре столкнулся с проблемой режима полета-SIM-PIN. Поскольку я уже некоторое время использую Xposed Framework, у меня возникла идея поискать модуль xposed, который решал бы эту проблему. :)

Ответ кроется в источнике... кажется, что свойство запрашивать пин-блокировку встроено в build.propor default.prop.

Взгляните на ссылку, найденную в исходниках TelephonyManager между строками 735 и 755. Для краткости:

public int getSimState() {
        String prop = SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE);
        if ("ABSENT".equals(prop)) {
            return SIM_STATE_ABSENT;
        }
        else if ("PIN_REQUIRED".equals(prop)) {
            return SIM_STATE_PIN_REQUIRED;
        }
        else if ("PUK_REQUIRED".equals(prop)) {
            return SIM_STATE_PUK_REQUIRED;
        }
        else if ("NETWORK_LOCKED".equals(prop)) {
            return SIM_STATE_NETWORK_LOCKED;
        }
        else if ("READY".equals(prop)) {
            return SIM_STATE_READY;
        }
        else {
            return SIM_STATE_UNKNOWN;
        }
    }

Ключ тот, на TelephonyProperties.PROPERTY_SIM_STATEкоторый ссылаются в другом месте , между строками 94 и 98.

//****** SIM Card
/**
 * One of <code>"UNKNOWN"</code> <code>"ABSENT"</code> <code>"PIN_REQUIRED"</code>
 * <code>"PUK_REQUIRED"</code> <code>"NETWORK_LOCKED"</code> or <code>"READY"</code>
 */
static String PROPERTY_SIM_STATE = "gsm.sim.state";

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

services/java/com/android/server/am/BatteryStatsService.java 219:      int simState = TelephonyManager.getDefault().getSimState();

telephony/java/android/telephony/TelephonyManager.java 523:    public int getSimState() { 551:     * @see #getSimState 562:     * @see getSimState

policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java 478:    public IccCard.State getSimState() {

policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java 545:            final IccCard.State state = mUpdateMonitor.getSimState();

policy/src/com/android/internal/policy/impl/LockPatternKeyguardViewProperties.java 57:        final IccCard.State simState = mUpdateMonitor.getSimState();

policy/src/com/android/internal/policy/impl/LockScreen.java 273:       mStatus = getCurrentStatus(updateMonitor.getSimState());

policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java 173:                && (mUpdateMonitor.getSimState() == IccCard.State.ABSENT); 217:                final IccCard.State simState = mUpdateMonitor.getSimState(); 469:                && (mUpdateMonitor.getSimState() != IccCard.State.PUK_REQUIRED)) { 512:   secure = mUpdateMonitor.getSimState() == IccCard.State.PIN_REQUIRED 513:                            || mUpdateMonitor.getSimState() == IccCard.State.PUK_REQUIRED; 643:        final IccCard.State simState = mUpdateMonitor.getSimState(); 662:        final IccCard.State simState
= mUpdateMonitor.getSimState();

policy/tests/src/com/android/internal/policy/impl/LockPatternKeyguardViewTest.java 49:        public IccCard.State getSimState() {

Дают ли эти имена файлов подсказку, да, на экране блокировки...

Теория

На данный момент для этого требуется root, вызывая adb shellи вызывая getpropи setpropчтобы сделать это, единственная часть, вызывая

adb shell getpropвернет соответствующую информацию, как показано ниже

sh-4.1# getprop
[gsm.sim.state]: [READY]

Это тонкое свойство, по-видимому, динамически сохраняется в резервном хранилище свойств с момента включения и соответствующим образом корректируется в зависимости от количества вещей, услуг, не говоря уже о случайном падении телефона, которое может выбить сим-карту из своего считывателя, который изменит состояние карты на « не готово » или « неизвестно ». ( ссылка: system/core/include/cutils/properties.h и system/core/toolbox/ [ getprop | setprop ].c)

На данный момент, теоретически, вызывая setprop перед блокировкой экрана, его можно временно обойти, но опять же, это может быть сброшено уровнем телефонии! Такого не пробовал! Что ведет к этому...

Заключение

Единственный способ отключить это — эффективно отключить запрос PIN-кода на фактической сим-карте . Именно здесь хранится «магический» битовый флаг, в котором уровень RIL телефонии считывает его через проприетарную библиотеку htc/samsung/qualcomm, и это предотвратит распространение сохранения свойства «PIN_REQUIRED» до слои Android.

Возможный обходной путь, только для разработчиков Android :)

Это потребует взлома и перекомпиляции исходного кода. Для режима полета при входе в этот режим и выходе из режима полета свойство можно разделить на два, gsm.sim.state можно оставить как есть, но придумать другое свойство, что-то вроде этого, gsm.sim.state. plane.mode и присвойте значение в соответствии со строками SIM_STATE_PIN_NOT_REQUIREDи измените проверку режима полета, чтобы прочитать это свойство и, если установлено, не отображать диалоговое окно булавки, в противном случае, как обычно, запрашивать его.

Спасибо за подробное объяснение, t0mm13b! Таким образом, мы должны предположить, что Samsung и LG изменили код во всех местах, которые вы упомянули, - если отчеты, которые я получил об устройствах Samsung и LG (где люди сказали, что могут отключить проверку PIN-кода SIM-карты отдельно, как описано в моем вопросе) правильный?
Еще раз спасибо! Если бы вы могли найти этот параметр в CM, и с тех пор, когда он там, это уже было бы большой помощью, поскольку CM доступен для многих устройств :) Все мои устройства работают под управлением CM 7.x, поэтому я мог бы проверить -- правда с такой настройкой пока не сталкивался (поэтому и спрашиваю где искать ;)
Попробуйте «Настройки»> «Настройки местоположения и безопасности», «Блокировка SIM-карты»?
Мне пришлось удалить комментарий, который был ответом на ваш вопрос там же, он присутствует в источниках AOSP (впервые увидел его, так как моя сим-карта уже разблокирована и в любом случае не блокируется запросом пин-кода)
Подтверждено в ICS, Настройки > Безопасность. Подтверждено в обновлении Eclair 2.1 и в Gingerbread (Настройки > Настройки местоположения и безопасности, Блокировка SIM-карты)
Не подтверждено для Gingerbread (CM7.2 на моем Motorola Droid²/Milestone²). Правда, PIN-код SIM-карты можно настроить в описанном месте -- но только вкл/выкл, а не выборочно "только при включении". Извини.

Я не уверен, что вам нужно делать то, что вы пытаетесь сделать.

Вместо этого вы можете:

  • Настройте две Taskerзадачи для включения/выключения всего, что Airplaneделает включение/отключение режима.
  • Никогда не используйте на самом деле свой Airplaneрежим. Используйте свои Taskerзадачи.

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

Вы также можете настроить, Taskerчтобы всегда переходить в Airplaneрежим при выключении. Таким образом, вы увидите блокировку PIN-кода во время загрузки.

Спасибо, zero2cx -- но я прошу не для себя одного, и не специально для Tasker (я в курсе, что здесь я мог бы отключить вещи отдельно, но отдельное отключение сотового радио не работает с моим Milestone²). В ответе на связанные вопросы я также упоминаю два других приложения. Сообщается, что они требуют ввода или отключения PIN-кода, поскольку они используют режим полета. Поэтому, пожалуйста, поймите, что мне не нужно конкретное решение Tasker (поскольку многие считают Tasker слишком сложным), а скорее общее решение для выполнения того, о чем я просил: отключить запрос PIN-кода только при выходе из режима полета.
Хорошо. Тогда я в тупике. Должен быть способ переключать его с помощью программного обеспечения, но более тонким способом. Как Samsung позволяет вам это делать?
Я не могу сказать (у меня нет устройства Samsung). Но у меня есть сообщения, что это выполнимо на многих (всех?) устройствах Samsung, а также на LG. На моем Milestone² я не проверял явно, так как моя текущая SIM-карта раньше была в моем HTC Buzz/Wildfire, где мне пришлось полностью отключить SIM-PIN для этой цели.