我有2個應用程序應用程序1(com.mine.app1
),其中我已聲明SharedPreference
。SharedPreferences交叉應用程序
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.
在這裏,我有以下代碼(下一個按鈕的onclick):
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");
我這種情況下我得到兩個internalPincode
和externalPincode
「DDDD」(這是在應用程序1(com.mine.app1
)中設置的值)
我預計internalPincode
將返回「none」和externalPincode
「dddd」在這兩種情況下。
爲什麼不呢?
感謝您指出我答案中的缺陷。我已經刪除它以防止誤導。 –
@CommonsWare:謝謝你向我展示另一種解決方案,但這不是我要找的。我在尋找一個同步解決方案,我可以輕鬆地在我的應用程序中查找設置,而無需創建ContentProvider(由於開銷)或廣播數據。我喜歡將此代碼用作多個項目中使用的「助手」類。 – RvdK
嗯......這個解決方案的缺陷是應用程序1永遠不會知道應用程序2所做的更改,而應用程序1沒有運行。應用程序1將啓動,閱讀其自己的偏好,並保持無視。我沒有看到有兩個應用程序用於共享偏好數據的外部共享文件。 – JamieB