Android PreferenceActivity可跨应用程序创建MODE_WORLD_WRITEABLE首选项

Sam*_*gal 3 android preferences preferenceactivity

我有多个应用程序通过首选项共享某些数据.每个应用程序通过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);
Run Code Online (Sandbox Code Playgroud)

上面的代码返回{}

  • 其次,我如何使用addPreferencesFromIntent(i) - 我得到一个NullPointerException,即使intent不是Null.

我在这里先向您的帮助表示感谢.

最好的,Sameer

Sam*_*gal 6

要以安全的方式从另一个应用程序访问首选项,在Manifest中设置相同的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();
        }
Run Code Online (Sandbox Code Playgroud)

非常感谢@CommonsWare和Karthik Shanmugam的帮助!