10 votos

desactivar la solicitud de PIN después del modo de avión

Cuando se enciende el teléfono, se le pide a uno por defecto que introduzca el SIM-PIN - que es una buena medida de seguridad, para evitar que "extraños" le causen gastos. Ahora lo mismo se aplica cuando se regresa del modo de avión: uno tiene que introducir el SIM-PIN de nuevo. Lo que hace que ciertos ahorradores de energía sean inútiles: si una aplicación, por ejemplo, entra en modo avión al perderse la señal (ver: ¿Qué es Celular en espera y cómo puedo evitar que se coma mi batería? ), no podría volver a funcionar normalmente sin la interacción del usuario.

Estoy buscando una manera de selectivamente Deshabilitar esto: Tener la solicitud de PIN activa al encender el dispositivo - pero que no se le pida el SIM-PIN al regresar del modo de avión.

Por favor, hazlo. no confundir esto con "keyguard": No estoy preguntando por el bloqueo de la pantalla (PIN/patrón/contraseña). Aquí conozco mi camino, ya que hay una API para que las aplicaciones puedan ser utilizadas (así que puedo, por ejemplo, desactivar esto temporalmente con Tasker ).

Sé que esto funciona con los dispositivos Samsung pero prefiero una solución independiente del dispositivo que funcione para todos los fabricantes.

8voto

Nick Pierpoint Puntos 7976

La respuesta está en la fuente... parece ser que la propiedad para solicitar el pin-lock está construida en build.prop o default.prop .

Echa un vistazo a la referencia que se encuentra en el TelephonyManager fuente entre las líneas 735 y 755. Por brevedad,

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 clave es TelephonyProperties.PROPERTY_SIM_STATE que se refiere en otro lugar entre las líneas 94 y 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";

Después de buscar en el código fuente aquí en mi máquina, te daré una idea de la frecuencia con la que este método getSimState se llama, fíjense en los nombres de la fuente de Java para saber cómo se integra en Android, no sólo en la capa de telefonía sino en cualquier otro lugar.

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

¿Esos nombres de archivos dan una pista, sí, en la pantalla de la cerradura...

Teoría

Esto requiere que Root en este punto, invocando la adb shell y llamando getprop y setprop para hacer esto, la única parte es esta, invocando

adb shell getprop obtendrá la información pertinente como se muestra a continuación

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

Esta sutil propiedad parece persistir dinámicamente en una tienda de propiedades de respaldo, desde el momento en que se enciende y se ajusta en consecuencia, basado en el número de cosas, el servicio, y por no hablar de dejar caer accidentalmente el auricular que puede dejar fuera de su lector la tarjeta sim, lo que cambiaría el estado de la tarjeta a " no está listo "o" desconocido ". ( ref: sistema/núcleo/incluir/cutillas/propiedades.h y sistema/núcleo/caja de herramientas/ [ getprop | setprop ].c)

Ahora en este punto, teóricamente, invocando setprop antes de bloquear la pantalla, podría ser evitado temporalmente, pero de nuevo, eso podría ser restablecido por la capa de telefonía! ¡No he intentado eso! Lo que está llevando a esto...

Conclusión

El La única manera esto puede ser apagado, es para efectivamente deshabilitar la solicitud de bloqueo de la tarjeta SIM real . Ahí es donde se almacena la bandera de bits "mágica", en la que la capa de RIL de la telefonía la lee a través de la biblioteca propietaria htc/samsung/qualcomm, y eso evitaría la propagación de la persistencia de la propiedad "PIN_REQUIRED" a través de las capas de Android.

Una posible solución, sólo para desarrolladores de Android :)

Esto requeriría hackear y recompilar la fuente. Para el modo de avión, al entrar en ese modo y al salir del modo de avión, la propiedad podría dividirse, en dos, gsm.sim.state puede dejarse como está, pero inventar otra propiedad, algo como esto, gsm sim modo.de.avión.estatal y asignar un valor a lo largo de las líneas de SIM_STATE_PIN_NOT_REQUIRED y modificar la comprobación del modo de avión, para leer esa propiedad y si está configurado para ello, no mostrar el cuadro de diálogo de la clavija, de lo contrario, como suele hacerlo, lo incita.

3voto

zero2cx Puntos 189

No estoy seguro de que necesites hacer lo que estás tratando de hacer.

Podrías, en cambio:

  • Prepara dos Tasker tareas para activar/desactivar todo lo que habilita/deshabilita Airplane el modo lo hace.
  • Nunca uses realmente tu Airplane modo. Utilice su Tasker tareas.

Puede que tengas que ver si alguna aplicación está habilitada para automáticamente encender una radio de hardware. Observa si una aplicación intenta sincronizarse en segundo plano o lo que sea, puede que intenten activar las radios desactivadas. Si es así, deshabilita la capacidad de esa aplicación de activar automáticamente tu, por ejemplo, WiFi. Digo esto porque Airplane el modo ciertamente detuvo las conexiones WiFi inesperadas antes pero ya no, si intentas esta respuesta.

También podrías establecer Tasker para siempre entrar en Airplane modo de apagado. De esa manera verías el bloqueo del PIN al momento de iniciar.

1voto

FuzzyQ Puntos 200

DESCARGO DE RESPONSABILIDAD

  1. Esto necesita a Root. No hay manera de evitarlo.
  2. Su dispositivo debe funcionar con Android 4.1+.
  3. Esta solución puede ser demasiado avanzada para algunos usuarios. Sólo intenta aplicarlo cuando sepas lo que estás haciendo.
  4. No me hago responsable si algo sale mal o si Ragnarök comienza durante el proceso. Estás haciendo esto bajo tu propio riesgo. Proceda con cautela.
  5. No soy el autor ni estoy afiliado a ninguno de los mods mencionados. Simplemente encontré esto y lo estoy compartiendo para su beneficio.

LÍNEA DE TRABAJO

Encontré una solución al problema que funciona muy bien en una Samsung Galaxy S2 con el Cyanogenmod 10.2 y el núcleo Dorimanx 9.41 instalados. Los pasos necesarios son los siguientes:

  1. Asegúrate de que tu dispositivo está rooteado.

  2. Descargue e instale Instalador del marco de Xposed .

  3. Cuando Xposed pregunte por Root en cualquier lugar del futuro cercano, conceda .

  4. Abra la aplicación y haga clic en Framework -Tab.

  5. Haga clic en Install/Update .

  6. Reiniciar .

  7. Descargue e instale Jelly Bean 4.x Ayudante de Modo de Avión .

  8. Abrir Xposed Framework Installer -Aplique de nuevo y seleccione Modules .

  9. Tictac (se activa) Jelly Bean 4.x Airplane Mode Helper .

  10. Reiniciar .

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

  12. Tictac (se activa) Habilitado .

  13. Reiniciar .

¡Eso es! El modo avión debería funcionar de nuevo como en las versiones anteriores de Android y hace no pedir el SIM-PIN por más tiempo cuando se apaga. Sin embargo, aún lo hace al inicio, manteniendo así su tarjeta SIM algo segura. Configuré un procedimiento automatizado de ahorro de batería con Perfiles de ubicación de la llama similar a la descrita aquí (Thx un montón, Izzy) y está funcionando perfectamente.

¡Buena suerte, amigos!

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X