10 votes

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

Lorsque l'on allume le téléphone, on est invité par défaut à saisir le 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 à nouveau entrer le SIM-PIN. Ce qui rend certaines économies d'énergie inutiles : si une application passe par exemple en mode avion en cas de perte de signal (voir : Qu'est-ce que Cellule en veille et comment l'empêcher de manger ma batterie ? ), il serait incapable de revenir à un fonctionnement normal sans l'intervention de l'utilisateur.

Je cherche un moyen de sélectivement désactivez ceci : Faire en sorte que la demande de NIP soit active à la mise sous tension de l'appareil, mais que le NIP de la carte SIM ne soit pas demandé au retour du mode avion.

Faites-le, s'il vous plaît. pas Confondre ceci avec "keyguard" : Je ne parle pas du verrouillage de l'écran (NIP/modèle/mot de passe). Dans ce cas, je m'y connais, car il existe une API que les applications peuvent utiliser (je peux donc, par exemple, désactiver temporairement ce verrouillage avec Tasker ).

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

8voto

Nick Pierpoint Points 7976

La réponse se trouve dans la source... il semblerait que la propriété de demander un pin-lock soit intégrée dans l'application build.prop o default.prop .

Jetez un œil à la référence trouvée dans le TelephonyManager source 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 TelephonyProperties.PROPERTY_SIM_STATE qui est visé 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 parcouru le code source ici sur ma machine, je vous donne une idée de la fréquence à laquelle cette méthode getSimState est appelé, remarquez les noms des sources java pour comprendre comment elles sont intégrées dans Android, pas seulement dans la couche téléphonie mais ailleurs.

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, oui, sur l'écran de verrouillage...

Théorie

Pour cela, il faut que Root, à ce stade, en invoquant la fonction adb shell et en appelant getprop y setprop pour faire cela, la seule partie est celle-ci, en invoquant

adb shell getprop vous obtiendrez les informations pertinentes comme indiqué ci-dessous

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

Cette propriété subtile semble être persistée dynamiquement dans un magasin de propriétés de sauvegarde, à partir du moment de la mise sous tension et est ajustée en conséquence, en fonction d'un certain nombre de choses, du service, et sans parler de la chute accidentelle du combiné qui peut faire tomber la carte SIM de son lecteur, ce qui changerait l'état de la carte en " ". pas prêt " o " inconnu ". ( réf : system/core/include/cutils/properties.h y système/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é ! Ce qui nous amène à ceci...

Conclusion

El seul moyen ce qui peut être désactivé, c'est d'effectivement désactiver la demande de pin-lock sur la carte sim actuelle . C'est là que le bit-flag "magique" est stocké, dans lequel la couche RIL de la téléphonie le lit via la bibliothèque propriétaire htc/samsung/qualcomm, et cela empêcherait la propagation de la persistance de la propriété "PIN_REQUIRED" à travers les couches d'Android.

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

Il faudrait pour cela pirater et recompiler les sources. Pour le mode avion, lorsqu'on entre dans ce mode et qu'on le quitte, la propriété pourrait être divisée en deux, gsm.sim.state peut être laissé tel quel, mais concevez une autre propriété, quelque chose comme ceci, gsm.sim.state.airplane.mode et attribuer une valeur du type SIM_STATE_PIN_NOT_REQUIRED et modifiez la vérification du mode avion, pour lire cette propriété et, si elle est définie comme telle, ne pas afficher la boîte de dialogue de l'épingle, sinon, comme d'habitude, l'inviter.

3voto

zero2cx Points 199

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

Vous pourriez, au contraire :

  • Installez deux Tasker des tâches pour activer/désactiver tout ce qui permet d'activer/désactiver Airplane le fait.
  • N'utilisez jamais réellement votre Airplane mode. Utilisez votre Tasker tâches.

Vous devrez peut-être voir si des applications sont activées pour automatiquement allumer une radio matérielle. Regardez si une application tente une synchronisation 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 Airplane a certainement arrêté les connexions WiFi inattendues avant mais plus maintenant, si vous essayez cette réponse.

Vous pouvez également mettre en place Tasker pour toujours aller dans Airplane à l'arrêt. De cette façon, vous verrez le verrouillage du code PIN au démarrage.

1voto

Tapan Points 39

CLAUSE DE NON-RESPONSABILITÉ

  1. Il faut Root. Pas moyen de contourner celui-ci.
  2. Votre appareil doit fonctionner sous Android 4.1+.
  3. Cette solution de contournement peut être trop avancée pour certains utilisateurs. N'essayez de l'appliquer que si vous savez ce que vous faites.
  4. Je ne suis pas responsable si quelque chose va de travers ou si le Ragnarök commence pendant le processus. Tu le fais à tes propres risques. Procéder avec prudence.
  5. Je ne suis pas l'auteur des mods mentionnés ni affilié à aucun d'entre eux. J'ai simplement trouvé ceci et je le partage pour votre bénéfice.

SOLUTION DE RECHANGE

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é. Les étapes nécessaires sont les suivantes :

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

  2. Télécharger et installer Installateur du cadre Xposed .

  3. Quand Xposed demande Root n'importe où dans un futur proche, l'accorder .

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

  5. Cliquez sur Install/Update .

  6. Redémarrer .

  7. Télécharger et installer Aide pour le mode avion de Jelly Bean 4.x .

  8. Ouvrir Xposed Framework Installer -Appliquez à nouveau et sélectionnez Modules .

  9. Cocher (activer) Jelly Bean 4.x Airplane Mode Helper .

  10. Redémarrer .

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

  12. Cocher (activer) Activé .

  13. Redémarrer .

C'est ça ! Le mode avion devrait fonctionner à nouveau comme dans les versions précédentes d'Android. no ne demande plus le PIN-SIM lorsqu'il est éteint. Il le fait toujours au démarrage, cependant, ce qui permet de protéger votre carte SIM. J'ai mis en place une procédure automatique d'économie de batterie avec Profils de localisation des lamas similaire à celui décrit aquí (Merci beaucoup, Izzy) et ça fonctionne parfaitement.

Bonne chance, les amis !

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X