我已经阅读了有关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或内容提供商的远程服务。

10-01 01:44
查看更多