Wykryj zmiany „Zablokuj kartę SIM” w Ustawieniach / Zabezpieczeniach / Ustaw blokadę karty SIM

Pytanie skierowane do Androida 4.0.x najlepiej.

Chcę wykryć natychmiast lub po kilku sekundach wszelkie zmiany dokonaneLock SIM card wSettings > Security > Set up SIM card lock.

Próbowałem 3 metod:

1) dostęp tylko do odczytucom.android.settings wspólne preferencje.

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

W logcat pojawia się ostrzeżenie: „Próba odczytania pliku preferencji /data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml bez zezwolenia”. Mapa zwrócona przezgetAll() jest pusty.

2)ITelephony.isSimPinEnabled() zawsze zwraca false, nawet jeśli PIN karty SIM jest włączony i ustawiony. Wygląda więc na to, że zmiana ustawienia nie ma absolutnie nic wspólnego z tym interfejsem. Myślałem o sondowaniu interfejsu, ale to też nie jest dobre.

3) tworzenieContentObserver obserwowanieSettings.Secure nie działa tutaj. Właściwie, czytanie treścisettings.db z sqlite pokazuje, że podczas zmiany tego ustawienia nie ma żadnych zmodyfikowanych rekordów. Zostało to również potwierdzone przez następujący kod:

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

Jedyne, co jestem pewien, to modyfikacjaSIM PIN enabled ustawienie przepisuje plik preferencji com.android.settings.xml, jak pokazano poniżej:

$ 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>

Znacznik, którego dotyczy zmiana, tosim_toggle.

Czy ktoś ma pomysł? Co ja tu robię źle?

questionAnswers(2)

yourAnswerToTheQuestion