旨在Android的一个问题优选4.0.x的。
我想立即检测,或几秒钟后,所做的任何变更,以Lock SIM card
在Settings > Security > Set up SIM card lock
。
我试过3种方法:
1)访问只读com.android.settings
共享偏好。
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());
}
有一个在logcat的一个警告:“尝试读取预置文件/data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml未经允许”。 通过返回的映射getAll()
是空的。
2) ITelephony.isSimPinEnabled()
总是返回false,即使在SIM PIN启用并设定。 所以会出现更改设置有绝对无关,与这个接口。 我想查询的接口,但是这是没有不太妙。
3)创建ContentObserver
观察Settings.Secure
不能在这里工作。 其实,阅读的内容settings.db
使用SQLite表示没有更改此设置时修改的任何记录。 这也被下面的代码证实:
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.
}
我唯一确定的事情是,修改SIM PIN enabled
设置重写com.android.settings的preferences.xml文件,如下所示:
$亚行外壳猫/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>
受变化的标签是sim_toggle
。
有没有人有一个想法? 我在做什么错在这里?