Android PreferenceActivity创建一个跨应用的MODE_WORLD_WRITEABLE偏好设置

3

我有多个应用程序通过偏好设置共享某些数据。每个应用程序通过PreferenceActitivity(来自xml)设置其首选项。两个问题:

如何在另一个应用程序中使用/编辑由一个应用程序创建的首选项。如果我找出如何使用PreferenceActivity创建MODE_WORLD_WRITEABLE首选项,那么问题就解决了。

 SharedPreferences prefs = getSharedPreferences(
          <String referring to another package´s prefs>, MODE_WORLD_WRITEABLE);
        HashMap<String, String> map = (HashMap<String, String>) prefs
          .getAll();


        String str = map.toString();
        tv.setText(str);

以上代码返回 {}。

  • 其次,如何使用 addPreferencesFromIntent(i) -- 即使意图不为空,我仍然遇到了 NullPointerException。

提前感谢您的帮助。

最好, Sameer

1个回答

6

为了以安全方式从另一个应用程序访问首选项,请在清单中设置相同的android:sharedUserId。这将允许您以MODE_PRIVATE(或安全)方式访问首选项和文件。

经过长时间的研究,我们意识到仅此还不够,需要创建第一个应用程序的软件包上下文才能访问第二个应用程序中的文件:

try {
            Context c = createPackageContext(com.app.first, MODE_PRIVATE);
            SharedPreferences prefs = c.getSharedPreferences(
                    "com.app.first_preferences", MODE_PRIVATE);

        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }

感谢@CommonsWare和Karthik Shanmugam的帮助!

但是如果应用程序已经上线,您不能添加sharedUserId...这会导致很多问题。这只是我的个人意见。 - Anthony Graglia
这种解决方案的缺点是第二个应用程序必须假定第一个应用程序已安装。请参阅http://stackoverflow.com/q/11803585/722603。 - ef2011

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接