désactiver la demande de code PIN après le mode avion

10

Lors de la mise sous tension du téléphone, il est demandé par défaut d'entrer le code PIN SIM - ce qui est une bonne mesure de sécurité, pour éviter que des «étrangers» ne vous causent des frais. Maintenant, la même chose s'applique au retour du mode avion: il faut saisir à nouveau le SIM-PIN. Ce qui rend certains économiseurs d'énergie inutiles: si une application passe par exemple en mode avion en cas de perte de signal (voir: Qu'est-ce que la veille cellulaire et comment puis-je l'empêcher de manger ma batterie? ), Elle ne pourrait pas revenir à un fonctionnement normal sans intervention de l'utilisateur .

Je cherche un moyen de désactiver cela de manière sélective : avoir la demande de code PIN active lors de la mise sous tension de l'appareil - mais ne pas demander le code PIN SIM lors du retour du mode avion.

Veuillez ne pas confondre cela avec "keyguard": je ne pose pas de question sur le verrouillage de l'écran (PIN / motif / mot de passe). Ici, je connais mon chemin, car il existe une API pour les applications à utiliser (donc je peux par exemple désactiver temporairement cela avec Tasker ).

Je sais que cela fonctionne avec les appareils Samsung - mais je souhaite de préférence une solution indépendante de l'appareil qui fonctionne pour tous les fabricants.

Izzy
la source
2
Vraiment! Permettez-moi de citer la question ci-dessus: je cherche un moyen de désactiver sélectivement cela - de ne pas désactiver complètement la vérification. Je sais qu'il peut être complètement désactivé (c'est ce que j'utilise actuellement) - mais je veux le désactiver uniquement pour revenir du mode Avion, pas pour le démarrage de l'appareil.
Izzy

Réponses:

1

AVERTISSEMENT

  1. Cela a besoin de root. Pas moyen de contourner celui-là.
  2. Votre appareil doit exécuter Android 4.1+
  3. Cette solution de contournement peut être trop avancée pour certains utilisateurs. N'essayez de l'appliquer que lorsque vous savez ce que vous faites.
  4. Je ne serai pas tenu responsable si quelque chose tourne mal ou si Ragnarök démarre pendant le processus. Vous faites cela à vos propres risques. Procéder avec prudence.
  5. Je ne suis pas l'auteur ou autrement affilié à l'un des mods mentionnés. Je l'ai simplement trouvé et je le partage à votre avantage.

SOLUTION DE CONTOURNEMENT

J'ai trouvé une solution de contournement pour le problème qui fonctionne à merveille sur un Samsung Galaxy S2 avec Cyanogenmod 10.2 et Dorimanx Kernel 9.41 installés. Les étapes nécessaires sont les suivantes:

  1. Assurez-vous que votre appareil est enraciné.

  2. Téléchargez et installez Xposed Framework Installer .

  3. Lorsque Xposed demande la racine n'importe où dans un avenir proche, accordez-la .

  4. Ouvrez l'application et cliquez sur Framework-Tab.

  5. Cliquez Install/Update.

  6. Redémarrez .

  7. Téléchargez et installez Jelly Bean 4.x Airplane Mode Helper .

  8. Ouvrez à Xposed Framework Installernouveau -App et sélectionnez Modules.

  9. Cochez (définir actif) Jelly Bean 4.x Airplane Mode Helper.

  10. Redémarrez .

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

  12. Cochez (définir actif) activé .

  13. Redémarrez .

C'est ça! Mode avion devrait fonctionner à nouveau comme dans les versions Android précédentes et ne pas demander SIM-PIN plus longtemps lorsqu'il est désactivé. Il le fait toujours au démarrage, gardant ainsi votre carte SIM quelque peu en sécurité. J'ai mis en place une procédure d'économie de batterie automatisée avec des profils d'emplacement de lamas similaires à celui décrit ici (Thx a bunch, Izzy) et cela fonctionne parfaitement.

Bonne chance, les amis!

FuzzyQ
la source
1
Merci beaucoup pour votre réponse! Je viens de le modifier pour améliorer la mise en forme (listes) et d'ajouter le fait qu'il nécessite JB +. Comme mes appareils ne fonctionnent pas encore avec JB, je ne peux pas le tester - mais je pense que vous avez peut-être manqué la partie la plus importante de la question (au moins vous ne le mentionnez pas): demande-t-il le code PIN SIM lors du retour de l'avion mode - ou cela peut-il être ignoré de cette façon?
Izzy
1
Rassurez-vous, j'ai complètement votre problème et ma réponse est exactement ce que vous cherchiez;) - il ne demande pas le SIM-PIN lors du retour du mode avion, mais il le fait toujours au démarrage. Ainsi, votre sécurité est maintenue mais votre script d'économie de batterie fonctionne à nouveau. Merci pour la mise à niveau du formatage!
FuzzyQ
J'ai ajouté les informations les plus importantes car vous aviez raison - j'ai totalement oublié de mentionner le fait que cela supprime en fait la nécessité de déverrouiller à nouveau votre carte SIM après le mode avion.
FuzzyQ
1
Dans ce cas, c'est exactement ce que je recherchais: Les travaux automatisés fonctionnent sans intervention manuelle, mais l'appareil est toujours protégé en ce qui concerne l '"initialisation" (c'est-à-dire après un démarrage). Excellent! Je vote pour l'instant. Comme je ne peux pas non plus tester la solution de t0mm13b, je dois vous faire confiance en ce qui concerne mon "acceptation": cela ressemble à la solution la plus prometteuse (et gratuite!) À ce jour, bien que limitée à JB +.
Izzy
Vous savez, c'est drôle comment je suis arrivé là-bas en premier lieu. J'ai trouvé votre question et réponse au problème de veille cellulaire et je me suis vite retrouvé avec le problème du mode avion-SIM-PIN. Depuis que j'utilise Xposed Framework depuis un certain temps maintenant, j'ai eu l'idée de chercher un module xposed qui traiterait le problème. :)
FuzzyQ
8

La réponse se trouve dans la source ... il semble que la propriété de demander le verrouillage des broches soit intégrée à build.propou default.prop.

Jetez un œil à la référence trouvée dans la source TelephonyManager , entre les lignes 735 et 755. Par souci de concision,

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

La clé est celle TelephonyProperties.PROPERTY_SIM_STATEqui est référencée ailleurs , entre les lignes 94 et 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";

Après avoir recherché le code source ici sur ma machine, je vais vous donner une idée de la fréquence à laquelle cette méthode getSimStateest appelée, notez les noms de la source java pour savoir comment elle est intégrée dans Android, pas seulement dans la couche Téléphonie mais autre part.

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

Est-ce que ces noms de fichiers donnent un indice, yup, dans l'écran de verrouillage ...

Théorie

Cela nécessite root à ce stade, en adb shellappelant et en appelant getpropet setproppour ce faire, la seule partie est la suivante, en invoquant

adb shell getprop récupérera les informations pertinentes comme indiqué ci-dessous

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

Cette propriété subtile semble persister dynamiquement dans un magasin de propriétés de support, à partir du moment de la mise sous tension et est ajustée en conséquence, en fonction du nombre de choses, du service, et sans parler de la chute accidentelle du combiné qui peut faire tomber la carte SIM de son lecteur qui changerait l'état de la carte en " non prêt " ou " inconnu ". ( réf: system / core / include / cutils / properties.h et system / core / toolbox / [ getprop | setprop ] .c )

Maintenant, à ce stade, théoriquement, en invoquant setprop avant de verrouiller l'écran, il pourrait être contourné temporairement, mais là encore, cela pourrait être réinitialisé par la couche de téléphonie! Je n'ai pas essayé ça! Ce qui mène à cela ...

Conclusion

La seule façon de désactiver cela est de désactiver efficacement la demande de verrouillage des broches sur la carte SIM réelle . C'est là que le bit-flag "magique" est stocké sur celui-ci, dans lequel la couche RIL de la téléphonie le lit via la bibliothèque propriétaire de htc / samsung / qualcomm, et cela empêcherait la propagation de la persistance de la propriété "PIN_REQUIRED" jusqu'à les couches d'Android.

Une solution de contournement possible, pour les développeurs Android uniquement :)

Cela nécessiterait le piratage et la recompilation de la source. Pour le mode avion, lorsque vous entrez dans ce mode et quittez le mode avion, la propriété peut être divisée en deux, gsm.sim.state peut être laissé tel quel , mais créez une autre propriété, quelque chose comme ceci, gsm.sim.state. Avion.mode et attribuez une valeur dans le sens de SIM_STATE_PIN_NOT_REQUIRED, et modifiez la vérification du mode avion, pour lire cette propriété et si elle est définie sur celle-ci, n'affichez pas la boîte de dialogue de broche, sinon comme d'habitude, invitez-la.

t0mm13b
la source
Merci pour l'explication détaillée, t0mm13b! Nous devons donc supposer que Samsung et LG ont changé le code dans tous les endroits que vous avez mentionnés - si les rapports que j'ai reçus sur les appareils Samsung et LG (où les gens ont dit qu'ils pouvaient désactiver la vérification du code PIN de la carte SIM séparément, comme décrit dans ma question) sont correct?
Izzy
Merci encore! Si vous pouviez dire que vous deviez trouver ce paramètre dans CM, et depuis qu'il est là, ce serait déjà une grande aide - car CM est disponible pour de nombreux appareils :) Mes appareils exécutent tous CM 7.x, donc je pourrait vérifier - même si je n'ai pas encore rencontré un tel paramètre (c'est pourquoi je demande l'endroit où chercher;)
Izzy
Essayez Paramètres> Paramètres de localisation et de sécurité, Verrou de la carte SIM?
t0mm13b
J'ai dû supprimer le commentaire qui était une réponse à votre question à l'intérieur de celui-ci, son présent dans les sources AOSP, (première fois que je l'ai vu car ma carte SIM est déjà déverrouillée et sans verrou de demande de broche de toute façon)
t0mm13b
1
Non confirmé pour Gingerbread (CM7.2 sur mon Motorola Droid² / Milestone²). Certes, le code PIN SIM peut être configuré à l'endroit décrit - mais uniquement sous / hors tension, non sélectif pour "uniquement à la mise sous tension". Pardon.
Izzy
3

Je ne suis pas sûr que vous ayez besoin de faire ce que vous essayez de faire.

Vous pourriez plutôt:

  • Configurez deux Taskertâches pour activer / désactiver tout ce que Airplanefait le mode d' activation / désactivation .
  • N'utilisez jamais réellement votre Airplanemode. Utilisez vos Taskertâches.

Vous devrez peut-être voir si des applications sont activées pour activer automatiquement une radio matérielle. Regardez pour voir si une application essaie de se synchroniser en arrière-plan ou autre, elle peut essayer d'activer les radios désactivées. Si c'est le cas, désactivez la capacité de cette application à allumer automatiquement votre WiFi par exemple. Je dis cela parce que le Airplanemode a certainement arrêté les connexions WiFi inattendues avant, mais plus maintenant, si vous essayez cette réponse.

Vous pouvez également configurer Taskerpour toujours passer en Airplanemode à l'arrêt. De cette façon, vous verriez le PIN Lock au démarrage.

zero2cx
la source
Merci, zero2cx - mais je ne demande pas pour moi seul, et pas spécialement pour Tasker (je suis conscient du fait que je pourrais désactiver les choses séparément ici; mais désactiver la radio cellulaire séparément ne fonctionne pas avec mon Milestone²). Dans la réponse aux questions liées, je mentionne également deux autres applications. Ils auraient exigé que le code PIN soit saisi ou désactivé, car ils utilisent le mode avion. Alors s'il vous plaît, comprenez que je ne veux pas d'une solution Tasker spécifique (car beaucoup trouvent Tasker trop complexe), mais plutôt une solution générique pour faire ce que j'ai demandé: désactiver la demande de code PIN au retour du mode avion uniquement.
Izzy
D'accord. Je suis perplexe, alors. Il doit y avoir un moyen de basculer avec le logiciel, mais de manière plus nuancée. Comment Samsung vous laisse-t-il procéder?
zero2cx
Je ne peux pas le dire (je n'ai pas d'appareil Samsung). Mais j'ai des informations selon lesquelles cela est faisable sur de nombreux (tous?) Appareils Samsung ainsi qu'avec LG. Sur mon Milestone², je n'ai pas vérifié explicitement, car ma carte SIM actuelle était dans mon HTC Buzz / Wildfire auparavant, si je devais désactiver complètement le SIM-PIN à cet effet.
Izzy