0

com.mine.app1を宣言した2 つのアプリケーション Application 1( ) がありSharedPreferenceます。

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

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

com.mine.app2アプリケーション 1 からを読み出そうとするアプリケーション 2 ( ) がありSharedPreferenceます。

ここに次のコードがあります(ボタンの 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");

この場合internalPincodeexternalPincode「なし」を取得します。

ただし、次の順序を変更すると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");

この場合、「dddd」 (アプリケーション 1 ( ) で設定された値) の両方を取得internalPincodeexternalPincodeますcom.mine.app1

internalPincodeどちらの場合も「none」とexternalPincode「dddd」が返されると思います。

なぜそうしないのですか?

4

1 に答える 1

4

アプリケーション 1 から SharedPreference を読み取ろうとするアプリケーション 2 (com.mine.app2) があります。

これは良い考えではありません。ユーザーはいつでもアプリケーション 1 を削除できますが、その時点でアプリケーション 2 はこのデータを取得できなくなります。

代わりに、同期モデルを使用してください。設定が変更されたときにアプリケーション 1 にブロードキャストを送信させ、Intent署名レベルのアクセス許可を添付して、アプリケーション 2 (またはあなたが作成した他のもの) のみが受信できるようにします。その後、アプリケーション 2 は、独自のローカル データ ストア (独自の などSharedPreferences) を更新できます。アプリケーション 2 は同じことを行うことができ、ユーザーが設定データのコピーを変更し、ブロードキャストを送信して他のアプリケーションに知らせることができます。これにより、1 つのアプリケーションが削除されても、他のアプリケーションの設定データは失われず、すべてが同期されたままになります。

于 2012-09-14T19:04:23.607 に答える