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

10

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

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

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

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

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

Ответы:

1

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

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

Временное решение

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

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

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

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

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

  5. Нажмите Install/Update.

  6. Reboot .

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

  8. Xposed Framework InstallerСнова откройте -App и выберите Modules.

  9. Тик (активен) Jelly Bean 4.x Airplane Mode Helper.

  10. Reboot .

  11. Open Jelly Bean 4.x Airplane Mode Helper.

  12. Галочка (активна) Включена .

  13. Reboot .

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

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

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

Ответ лежит в источнике ... кажется, что свойство запрашивать пин-блокировку встроено в build.propили 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 перед блокировкой экрана, его можно временно обойти, но опять же, это может быть сброшено слоем телефонии! Не пробовал это! Что ведет к этому ...

Заключение

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

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

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

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

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

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

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

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

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

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