Detecta cambios en "Bloquear tarjeta SIM" en Configuración / Seguridad / Configurar bloqueo de tarjeta SIM

Una pregunta dirigida a Android 4.0.x preferentemente.

Quiero detectar inmediatamente, o después de unos segundos, cualquier cambio realizado enLock SIM card enSettings > Security > Set up SIM card lock.

Probé 3 métodos:

1) acceso de solo lecturacom.android.settings Preferencias compartidas.

Context settings = getApplicationContext().createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences prefSettings = settings.getSharedPreferences("com.android.settings_preferences", MODE_WORLD_READABLE);

Map<String, ?> allSettings = prefSettings.getAll();
for(String s : allSettings.keySet()){
    //do somthing like String value=allSettings.get(s).toString());
}

Hay una advertencia en logcat: "Intente leer el archivo de preferencias /data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml sin permiso". El mapa devuelto porgetAll() esta vacio.

2)ITelephony.isSimPinEnabled() siempre devuelve falso, incluso cuando el PIN de la SIM está habilitado y configurado. Así que parece que cambiar la configuración no tiene absolutamente nada que ver con esta interfaz. Estaba pensando en sondear la interfaz, pero esto tampoco es bueno.

3) creando unContentObserver observandoSettings.Secure No está trabajando aquí. En realidad, leyendo el contenido desettings.db con los shows de sqlite no se modificó ningún registro al cambiar esta configuración. Esto también fue confirmado por el siguiente código:

try {
    int lockPattern = android.provider.Settings.Secure.getInt(getContentResolver(), android.provider.Settings.Secure.LOCK_PATTERN_ENABLED);
    // check lock Pattern: 0=disabled, 1=enabled
} catch (SettingNotFoundException e) {
    e.printStackTrace(); // on run, we reach this line.
}

Lo único que estoy seguro es que modificar elSIM PIN enabled la configuración reescribe el archivo com.android.settings preferences.xml como se muestra a continuación:

$ adb shell cat /data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="sim_toggle" value="true" />
<string name="sim_pin"></string>
</map>

La etiqueta afectada por el cambio essim_toggle.

¿Alguien tiene alguna idea? ¿Qué estoy haciendo mal aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta