Android:检索其他应用程序的共享首选项

时间:2011-05-17 11:48:59

标签: android preferences shared

我有一个设置应用程序,我必须从中检索其他应用程序首选项,但我没有其中的键的详细信息,如何检索该首选项中的所有可用键和值?

谢谢, Swathi

6 个答案:

答案 0 :(得分:46)

好!在应用程序1中使用此代码(包名称为“com.sharedpref1”)以使用共享首选项存储数据。

SharedPreferences prefs = getSharedPreferences("demopref",
                    Context.MODE_WORLD_READABLE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("demostring", strShareValue);
            editor.commit();

在应用程序2中使用此代码从应用程序1中的共享首选项中获取数据。我们可以获取它,因为我们在应用程序1中使用MODE_WORLD_READABLE:

    try {
                con = createPackageContext("com.sharedpref1", 0);
                SharedPreferences pref = con.getSharedPreferences(
                        "demopref", Context.MODE_PRIVATE);
                String data = pref.getString("demostring", "No Value");
                displaySharedValue.setText(data);

            } catch (NameNotFoundException e) {
                Log.e("Not data shared", e.toString());
            }

更多信息,请访问此网址: http://androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

答案 1 :(得分:23)

假设首选项为WORLD_READABLE,则可能有效:

final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>();
// where com.example is the owning  app containing the preferences
Context myContext = createPackageContext("com.example", Context.MODE_WORLD_WRITEABLE); 
SharedPreferences testPrefs = myContext.getSharedPreferences("test_prefs", Context.MODE_WORLD_READABLE); 
Map<String, ?> items = testPrefs .getAll();
for(String s : items.keySet()) {
  // do something like String value = items.get(s).toString());
}

答案 2 :(得分:10)

此外,您必须在两个应用的清单文件中添加相同的 android:sharedUserId

答案 3 :(得分:9)

不幸的是,文档现在甚至没有解释MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,而是说:

此常量在API级别17中折旧。  创建世界可读文件非常危险,可能会在应用程序中造成安全漏洞。强烈劝阻;相反,....等

由于折旧,在具有共享偏好的应用之间实现文件共享可能风险太大,尽管很简单。我不太关心游戏应用程序中MODE_WORLD_READABLE模式的安全漏洞,我只想将角色从一个应用程序转移到另一个应用程序。他们贬低两种共享模式太糟糕了。

答案 4 :(得分:5)

如果我们想要来自其他app / pkg / process的读取权限值,它可以工作。 但是jkhouw1的答案有些不对劲:

Context myContext = createPackageContext("com.example", 
            Context.MODE_WORLD_WRITEABLE);

应该是:

Context myContext = createPackageContext("com.example", 
            Context.CONTEXT_IGNORE_SECURITY);

但是,CONTEXT_IGNORE_SECURITY和MODE_WORLD_WRITEABLE具有相同的“int 2”值 总之,感谢这个问题和答案。

答案 5 :(得分:-1)

将一个应用程序的商店共享首选项数据检索到另一个应用程序很简单。

第1步:在两个应用的清单文件中添加相同的android:sharedUserId="android.uid.shared"

第2步:存储值application1

 SharedPreferences preferences = context.getSharedPreferences("token_id",    Context.MODE_WORLD_READABLE);
        Editor editor = preferences.edit();
        editor.putString("shared_token", encryptedValue);
        Log.e("aaa *** shared_token : ", encryptedValue.toString());
        editor.commit();

第3步:从application2获取价值

Context con = null;
        try {
            con = createPackageContext("application2 package name", Context.CONTEXT_IGNORE_SECURITY);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        try {
            if (con != null) {
                SharedPreferences pref = con.getSharedPreferences(
                        "token_id", Context.MODE_WORLD_READABLE);

                String data = pref.getString("shared_token", "");
                Log.d("msg", "Other App Data: " + data);
            } else {
                Log.d("msg", "Other App Data: Context null");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }