dezaktywuj żądanie PIN po trybie samolotowym

10

Podczas włączania telefonu domyślnie pojawia się prośba o wprowadzenie kodu PIN karty SIM - jest to dobry środek bezpieczeństwa, aby zapobiec ponoszeniu kosztów przez nieznajomych. Teraz to samo dotyczy powrotu z trybu samolotowego: należy ponownie wprowadzić kod PIN karty SIM. Co sprawia, że ​​niektóre energooszczędne urządzenia stają się bezużyteczne: jeśli aplikacja np. Wejdzie w tryb samolotowy po utracie sygnału (patrz: Co to jest tryb gotowości komórki i jak mogę zapobiec zużywaniu baterii? ), Nie będzie mógł wrócić do normalnej pracy bez interakcji użytkownika .

Szukam sposobu na selektywne wyłączenie tej opcji: Aktywuj żądanie PIN podczas włączania urządzenia - ale nie pytaj o PIN-SIM podczas powrotu z trybu samolotowego.

Proszę nie nie mylić tego z „Autoblokada klawiatury”: Nie pytam o blokady ekranu (PIN / wzorzec / hasło). Tutaj wiem, jak sobie radzić, ponieważ istnieje interfejs API dla aplikacji (dzięki czemu mogę np. Tymczasowo wyłączyć to w Tasker ).

Wiem, że to działa z urządzeniami Samsung - ale najlepiej chcę niezależne od urządzenia rozwiązanie, które działa dla wszystkich producentów.

Izzy
źródło
2
Naprawdę! Pozwól, że zacytuję powyższe pytanie: szukam sposobu na selektywne wyłączenie tego - a nie całkowite wyłączenie zaznaczenia. Wiem, że można go całkowicie wyłączyć (to jest to, czego aktualnie używam) - ale chcę go wyłączyć tylko w celu przełączenia z trybu samolotowego, a nie podczas uruchamiania urządzenia.
Izzy

Odpowiedzi:

1

ZRZECZENIE SIĘ

  1. To wymaga rootowania. Nie da się tego obejść.
  2. Twoje urządzenie musi mieć system Android 4.1+
  3. To obejście może być zbyt zaawansowane dla niektórych użytkowników. Staraj się go stosować tylko wtedy, gdy wiesz, co robisz.
  4. Nie będę ponosić odpowiedzialności, jeśli coś pójdzie nie tak lub Ragnarök rozpocznie się w trakcie procesu. Robisz to na własne ryzyko. Postępuj ostrożnie.
  5. Nie jestem autorem ani w żaden inny sposób związany z żadnym z wymienionych modów. Znalazłem to i dzielę się tym dla twojej korzyści.

OBEJŚCIE

Znalazłem obejście problemu, który działa pięknie na Samsungu Galaxy S2 z zainstalowanym Cyanogenmod 10.2 i jądrem Dorimanx 9.41. Niezbędne kroki są następujące:

  1. Upewnij się, że Twoje urządzenie jest zrootowane.

  2. Pobierz i zainstaluj Instalator Xposed Framework .

  3. Gdy Xposed poprosi o rootowanie w dowolnym miejscu w najbliższej przyszłości, udziel go .

  4. Otwórz aplikację i kliknij Framework-Tab.

  5. Kliknij Install/Update.

  6. Uruchom ponownie .

  7. Pobierz i zainstaluj Jelly Bean 4.x Tryb samolotowy Helper .

  8. Otwórz Xposed Framework Installerponownie aplikację i wybierz Modules.

  9. Zaznacz (ustaw jako aktywne) Jelly Bean 4.x Airplane Mode Helper.

  10. Uruchom ponownie .

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

  12. Zaznacz (ustaw jako aktywne) Włączone .

  13. Uruchom ponownie .

Otóż ​​to! Tryb samolotowy powinien znów działać, tak jak w poprzednich wersjach Androida, i nie pyta o PIN-SIM już po wyłączeniu. Jednak nadal działa podczas uruchamiania, dzięki czemu karta SIM jest nieco bezpieczna. Ustawiłem zautomatyzowaną procedurę oszczędzania baterii z profilami lokalizacji Llama podobnymi do opisywanych tutaj (Dzięki, Izzy) i działa ona bezbłędnie.

Powodzenia, ludzie!

FuzzyQ
źródło
1
Wielkie dzięki za odpowiedź! Właśnie go edytowałem, aby poprawić formatowanie (listy) i dodałem fakt, że wymaga JB +. Ponieważ moje urządzenia nie obsługują jeszcze JB, nie mogę go przetestować - ale podejrzewam, że mogłeś pominąć najważniejszą część pytania (przynajmniej o tym nie wspominasz): czy prosi o podanie numeru PIN karty SIM podczas powrotu z samolotu tryb - czy można to pominąć w ten sposób?
Izzy
1
Zapewniam cię, że całkowicie zrozumiałem twój problem, a moja odpowiedź jest dokładnie tym, czego szukałeś;) - nie pyta o kod PIN karty SIM podczas powrotu z trybu samolotowego, ale nadal działa podczas uruchamiania. W ten sposób twoje bezpieczeństwo jest utrzymywane, ale twój skrypt oszczędzania baterii znów działa. Dziękujemy za aktualizację formatowania!
FuzzyQ
Dodałem najważniejsze informacje, ponieważ miałeś rację - całkowicie zapomniałem wspomnieć o tym, że w rzeczywistości eliminuje to potrzebę odblokowania karty SIM ponownie po trybie samolotowym.
FuzzyQ
1
W tym przypadku właśnie tego chciałem: zautomatyzowane zadania działają bez ręcznej interwencji, ale urządzenie jest nadal chronione, jeśli chodzi o „inicjalizację” (tj. Po uruchomieniu). Świetny! Na razie głosuję za tym. Ponieważ nie mogę również przetestować rozwiązania t0mm13b, muszę ci zaufać w kwestii mojego „zaakceptowania”: wygląda na to jak dotąd najbardziej obiecujące (i za darmo!) Rozwiązanie, choć ograniczone do JB +.
Izzy
Wiesz, to zabawne, jak się tam dostałem. Znalazłem twoje pytanie i odpowiedź na problem z gotowością komórki i wkrótce skończyłem z problemem trybu samolotowego-SIM-PIN. Ponieważ już od jakiegoś czasu korzystam z Xposed Framework, wpadłem na pomysł, aby poszukać modułu xposed, który poradziłby sobie z tym problemem. :)
FuzzyQ
8

Odpowiedź leży w źródle ... wydaje się, że właściwość żądania blokady pinów jest wbudowana w build.proplub default.prop.

Spójrz na odniesienie znalezione w źródle TelephonyManager , pomiędzy liniami 735 i 755. Dla zwięzłości,

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;
        }
    }

Klucz jest TelephonyProperties.PROPERTY_SIM_STATEokreślony w innym miejscu , między wierszami 94 i 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";

Po przeszukaniu kodu źródłowego tutaj na moim komputerze, dam ci wyobrażenie o tym, jak często ta metoda getSimStatejest wywoływana, zwróć uwagę na nazwy źródła Java, aby dowiedzieć się, w jaki sposób jest on zintegrowany z Androidem, nie tylko w warstwie telefonicznej, ale gdzie indziej.

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() {

Czy te nazwy plików dają wskazówkę, tak, na ekranie blokady ...

Teoria

Wymaga to pierwiastek w tym momencie, przez wywoływanie adb shelli powołanie getpropi setpropto zrobić, to tylko część tego, powołując

adb shell getprop odzyska odpowiednie informacje, jak pokazano poniżej

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

Ta subtelna właściwość wydaje się być dynamicznie utrwalana w magazynie właściwości zaplecza od momentu włączenia i jest odpowiednio dostosowywana, w zależności od liczby rzeczy, usługi, nie mówiąc już o przypadkowym upuszczeniu słuchawki, która może spowodować wyrzucenie karty SIM z karty czytnik, który zmieni stan karty na „ niegotowy ” lub „ nieznany ”. ( patrz: system / core / include / cutils / properties.h oraz system / core / toolbox / [ getprop | setprop ] .c)

W tym momencie teoretycznie, wywołując setprop przed zablokowaniem ekranu, można go tymczasowo obejść, ale z drugiej strony może zostać zresetowany przez warstwę telefonii! Nie próbowałem tego! Co prowadzi do tego ...

Wniosek

Jedyny sposób ten może być wyłączony, jest skutecznie wyłączyć żądanie pin-lock na rzeczywiste karty SIM . W tym miejscu przechowywana jest „magiczna” flaga bitowa, w której warstwa RIL telefonii odczytuje ją za pośrednictwem zastrzeżonej biblioteki htc / samsung / Qualcomm, a to zapobiegałoby propagacji trwałości właściwości „PIN_REQUIRED” w górę przez warstwy Androida.

Możliwe obejście, tylko dla programistów Androida :)

Wymagałoby to włamania i ponownej kompilacji źródła. Dla trybu samolotowego, przy wchodzeniu w ten tryb i opuszczaniu trybu samolotowego, właściwość może być podzielona na dwie części, stan gsm.sim. można pozostawić bez zmian , ale należy opracować inną właściwość, coś w tym rodzaju, stan gsm.sim.state. airplane.mode i przypisz wartość wzdłuż linii SIM_STATE_PIN_NOT_REQUIREDi zmodyfikuj sprawdzanie trybu samolotowego, aby odczytać tę właściwość, a jeśli jest ustawiona na to, nie pokazuj okna dialogowego pinezki, w przeciwnym razie, jak zwykle, monituj.

t0mm13b
źródło
Dziękuję za szczegółowe wyjaśnienie, t0mm13b! Musimy więc założyć, że Samsung i LG zmieniły kod we wszystkich wymienionych miejscach - jeśli raporty, które otrzymałem na temat urządzeń Samsung i LG (gdzie ludzie mówili, że mogą osobno wyłączyć sprawdzanie kodu PIN karty SIM, jak opisano w moim pytaniu) poprawny?
Izzy
Dzięki jeszcze raz! Gdybyś mógł powiedzieć, aby znaleźć to ustawienie w CM, a ponieważ kiedy tam jest, byłoby to już bardzo pomocne - ponieważ CM jest dostępny dla wielu urządzeń :) Wszystkie moje urządzenia mają CM 7.x, więc ja mógł zweryfikować - choć jeszcze nie spotkałem się z takim ustawieniem (dlatego pytam o miejsce, w którym szukać;)
Izzy
Wypróbuj Ustawienia> Ustawienia lokalizacji i bezpieczeństwa, Blokada karty SIM?
t0mm13b
Musiałem usunąć komentarz, który był odpowiedzią na twoje pytanie w tym samym miejscu, jest obecny w źródłach AOSP (po raz pierwszy go zobaczyłem, ponieważ moja karta SIM jest już odblokowana i wolna od blokady żądania pin)
t0mm13b
1
Nie potwierdzono dla Gingerbread (CM7.2 na moim telefonie Motorola Droid² / Milestone²). To prawda, że ​​PIN karty SIM można skonfigurować w opisanym miejscu - ale tylko włączanie / wyłączanie, nie jest selektywny dla „tylko przy włączaniu”. Przepraszam.
Izzy
3

Nie jestem pewien, czy musisz robić to, co próbujesz zrobić.

Zamiast tego możesz:

  • Skonfiguruj dwa Taskerzadania, aby włączyć / wyłączyć wszystko, co Airplanerobi tryb włączania / wyłączania .
  • Nigdy nie używaj swojego Airplanetrybu. Wykorzystaj swoje Taskerzadania.

Może być konieczne sprawdzenie, czy jakieś aplikacje są włączone, aby automatycznie włączyć sprzętowe radio. Sprawdź, czy aplikacja próbuje synchronizować w tle lub cokolwiek innego, może próbować włączyć wyłączone radia. Jeśli tak, wyłącz zdolność tej aplikacji do automatycznego włączania np. Wi-Fi. Mówię to, ponieważ Airplanetryb z pewnością zatrzymał nieoczekiwane połączenia WiFi wcześniej, ale już nie, jeśli spróbujesz tej odpowiedzi.

Możesz również ustawić, Taskeraby zawsze przechodził w Airplanetryb przy wyłączaniu. W ten sposób zobaczysz blokadę PIN podczas uruchamiania.

zero2cx
źródło
Dziękuję, zero2cx - ale nie pytam o siebie samego, a nie szczególnie o Taskera (zdaję sobie sprawę z tego, że mogłem tutaj osobno wyłączyć, ale osobne wyłączenie radia komórkowego nie działa z moim Milestone²). W odpowiedziach na pytania powiązane wymieniam również dwie inne aplikacje. Podobno wymagają wprowadzenia lub wyłączenia kodu PIN, ponieważ używają trybu samolotowego. Rozumiem więc, że nie chcę konkretnego rozwiązania Tasker (jak wielu uważa, że Tasker jest zbyt skomplikowany), ale raczej ogólne rozwiązanie, aby zrobić to, o co prosiłem: wyłącz żądanie PIN tylko z trybu samolotowego.
Izzy
W porządku. Więc jestem zakłopotany. Musi istnieć sposób na przełączanie go za pomocą oprogramowania, ale w bardziej szczegółowy sposób. Jak Samsung na to pozwala?
zero2cx 24.09.12
Nie mogę powiedzieć (nie mam urządzenia Samsung). Ale mam raporty, że jest to wykonalne na wielu (wszystkich?) Urządzeniach Samsung, a także z LG. Na moim Milestone² nie sprawdziłem wyraźnie, ponieważ moja obecna karta SIM była wcześniej w moim HTC Buzz / Wildfire, czy w tym celu musiałem całkowicie wyłączyć PIN-SIM.
Izzy