一个针对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 文件,如下所示:
$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>
受更改影响的标签是sim_toggle
。
有人有想法吗?我在这里做错了什么?