0

我有 2 个应用程序 Application 1 ( com.mine.app1),我在其中声明了一个SharedPreference.

SharedPreferences controlinfo = getSharedPreferences("pincode", MODE_WORLD_WRITEABLE | MODE_WORLD_READABLE);
SharedPreferences.Editor editor = controlinfo.edit();

editor.putString("pincode", "dddd");
editor.commit();

我有一个应用程序 2 ( com.mine.app2),我在其中尝试SharedPreference从应用程序 1 中读出。

在这里,我有以下代码(在单击按钮下):

Context con = createPackageContext("com.mine.app1", 0);
SharedPreferences interalPref = getSharedPreferences("pincode", MODE_PRIVATE); //shared pref of App 2 (this app)
SharedPreferences externalPref = con.getSharedPreferences("pincode", MODE_PRIVATE); //shared pref of App 1
//note: MODE_PRIVATE doesn't matter

String internalPincode = interalPref.getString("pincode", "none");
String externalPincode = externalPref.getString("pincode", "none");

internalPincode在这种情况下,我得到externalPincode“无”。

但是,当我更改顺序时getSharedPreference

Context con = createPackageContext("com.mine.app1", 0);
SharedPreferences externalPref = con.getSharedPreferences("pincode", MODE_PRIVATE); //shared pref of App 1
SharedPreferences interalPref = getSharedPreferences("pincode", MODE_PRIVATE); //shared pref of App 2 (this app)

String internalPincode = interalPref.getString("pincode", "none");
String externalPincode = externalPref.getString("pincode", "none");

在这种情况下,我得到了两者internalPincodeexternalPincode“dddd”(这是应用程序 1 ( com.mine.app1) 中设置的值)

我希望在这两种情况下internalPincode都会返回“none”和externalPincode“dddd”。

为什么不呢?

4

1 回答 1

4

我有一个应用程序 2 (com.mine.app2),我在其中尝试从应用程序 1 中读取 SharedPreference。

这不是一个好主意。用户可以随时删除应用程序 1,此时应用程序 2 将无法再获取此数据。

相反,使用同步模型。让应用程序 1 在首选项更改时发送广播Intent,并附加签名级别的权限,以便只有应用程序 2(或您编写的任何其他人)可以接收它。然后应用程序 2 可以更新它自己的本地数据存储(例如,它自己的SharedPreferences)。应用程序 2 也可以这样做,允许用户修改其偏好数据的副本并发送广播以让其他应用程序知道。这样,如果删除任何一个应用程序,其他应用程序不会丢失其偏好数据,但一切都可以保持同步。

于 2012-09-14T19:04:23.607 回答