У меня есть два приложения, скажем, A и B. Приложение A имеет общий префикс, который создан как читабельный для всех, так что приложение B может получить к нему доступ.Когда я в первый раз пытаюсь получить доступ к общему значению префикса приложения A из приложения B, это дает правильный результат.Но проблема возникает, когда я изменяю значение общего префикса приложения A, а затем открываю приложение B, чтобы проверить обновленный общий преф, он дает то же самое старое значение.И что удивительно, когда я принудительно закрываю приложение B из настроек -> приложения и снова открываю приложение B, оно дает правильное обновленное значение общего префикса приложения A.
В чем проблема доступа к общему префу приложения, когда оноимеет значение WORLD_READABLE.
Ниже приведен исходный код приложения B , когда я обращаюсь к общему префру приложения A .
private boolean isDAEnabled() throws SecurityException {
Context context = null;
try {
context = createPackageContext(APP_A_PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (context == null) {
throw new SecurityException("can not read shared pref of old DAE");
}
SharedPreferences oldDaPrefs = context.getSharedPreferences
(A_SHAREDPREF_FILE_NAME, Context.MODE_WORLD_READABLE);
int what = oldDaPrefs.getInt(A_PREF_ENGINE_STATE, 4);
Log.d(TAG, "What is value "+ what);
return what == ENABLE_ENGINE; // ENABLE_ENGINE IS == 0
}
ИНиже приведен код, в котором я изменяю общие настройки Приложение A
private void setEnginePreference(boolean engineStatus) {
mPreferenceEditor = mPreference.edit();
if(engineStatus){
mPreferenceEditor.putInt(Constants.PREF_ENGINE_STATE, ENABLE_ENGINE);
} else {
mPreferenceEditor.putInt(Constants.PREF_ENGINE_STATE, DISABLE_ENGINE);
}
mPreferenceEditor.commit();
}