我已经阅读了有关SharedPreferences的所有文档,我有一个具有全局配置的应用程序,所有应用程序都将希望在发生更改时从中读取它们。我可以阅读SharedPreference,但是如何注册它的ChangeListener?
// App1
sharedPreferences = getSharedPreferences("my.test.Config_preferences", Context.MODE_WORLD_READABLE)
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
Log.i("TAG", "!!! App1 OnPreferenceChanged()"); //WORKING!
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
// App2
otherAppsContext = createPackageContext("my.test.Config", 0);
sharedPreferences = otherAppsContext.getSharedPreferences("my.test.Config_preferences", Context.MODE_WORLD_READABLE);
String s = sharedPreferences.getString("Name", "0"); //OK value
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
Log.i("TAG", "@@@ App2 OnPreferenceChanged()");
//NOT WORKING!
}
};
sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
最佳答案
这不是一个好的实现。
首先,一旦用户卸载my.test.Config_preferences
,您所有的应用程序都将失去其首选项。
其次,设备上的每个应用程序都可以读取这些首选项(而不仅仅是您的首选项),这对安全性和隐私性不利。
请给每个应用程序自己的SharedPreferences
。或者,如果需要具有一组中心的首选项(例如,应用程序和插件模型),请通过可以通过权限保护的内容公开首选项数据,例如使用AIDL或内容提供商的远程服务。