Android:检索其他应用程序的共享偏好

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

谢谢,Swathi

假设首选项是WORLD_READABLE,这可能工作:

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

好的! 在应用程序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()); } 

更多信息请访问以下url: http : //androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

另外,你必须在两个应用程序的清单文件中添加相同的android:sharedUserId

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

这个常数在API级别17中被折旧。创build世界可读的文件是非常危险的,并且很可能在应用程序中造成安全漏洞。 强烈不鼓励; 相反,….等

由于折旧,实施具有共享优先权的应用程序之间的文件共享可能风险太大,尽pipe它很简单。 我并不太在乎游戏应用程序中MODE_WORLD_READABLE模式的安全漏洞,我只是希望能够将字符从一个应用程序转移到另一个应用程序。 这太糟糕了,他们贬值这两种共享模式。

它可以工作,如果我们想要从其他应用程序/ pkg /进程读取的perference值。 但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”相同的值完全谢谢你的这个问题和答案。

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

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

第2步:存储值应用程序1

  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(); }