7

Android 4.3 でテスト済み。私は 2 つのアプリを持っていcom.my.app.firstますcom.my.app.second。私のアクティビティでは、他のアプリから設定を読みたいと思っています。両方のアプリに同じユーザー ID を使用することにしました。

android:sharedUserId="com.my.app"

私はいつも次のように設定をロードします。

prefs = getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE);

さて、私の2 番目のアプリでは、次のことを行います。

try {
    Context context = createPackageContext("com.my.app.first", Context.CONTEXT_IGNORE_SECURITY);
    // context.getPackageName() does indeed return "com.my.app.first"

    // Note: Context.MODE_WORLD_READABLE makes no difference here!
    prefs = context.getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE);
}

prefs.mFileを誤って指してい/data/data/com.my.app.second/shared_prefs/MyAppPreferences.xmlます。

明らかに、getSharedPreferencesの呼び出しは、他のアプリのコンテキストを使用したにもかかわらず、現在のアプリの設定を返します。私は何を間違っていますか?助けてください!

4

4 に答える 4

2

問題を発見!getSharedPreferencesこれは確かにAPIのバグのようです。以前の への呼び出しgetSharedPreferencesにより、他のcontext.getSharedPreferences()呼び出しが以前のインスタンス (現在のアプリの設定) を返すことが判明しました。

解決策は、他のアプリの設定を読み取る前に が呼び出されてgetSharedPreferences()ないことを確認することでした。

于 2013-08-19T17:16:32.867 に答える
2

古い文脈を読み直すだけで解決。私にもキャッシュのように聞こえます。

Context tempContext = context.createPackageContext(originalContext.getPackageName(),Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedInformationM2 = tempContext.getSharedPreferences("sharedInformation", Context.MODE_WORLD_READABLE);
于 2014-04-08T19:08:52.910 に答える