2010-08-21 27 views
3

我有多个应用程序通过首选项共享某些数据。每个应用程序通过PreferenceActitivity(从xml)设置其偏好。两个问题:Android PreferenceActivity跨应用程序创建MODE_WORLD_WRITEABLE首选项

如何在另一个应用程序中使用/编辑由一个应用程序创建的偏好设置。如果我想出如何使用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即使意图是不为空。

感谢您的帮助提前。

最佳, 萨米尔

回答

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的帮助!

+0

但是,如果应用程序已经存在,则无法添加sharedUserId ......它会混淆许多事情。只是我2美分。 – trgraglia 2011-01-30 18:55:14

+0

该解决方案的缺点是第二个应用程序必须假定安装了第一个应用程序。请参阅http://stackoverflow.com/q/11803585/722603 – ef2011 2012-08-03 23:07:42

相关问题