iOS UserDefaults Настройки обмена в нескольких приложениях Android Эквивалент - PullRequest
0 голосов
/ 06 января 2020

Для нашего iOS приложения у нас есть возможность для пользователя вводить простые настройки значения ключа, которые должны сохраняться в 6 других приложениях в той же группе приложений. Это означает, что пользователю не нужно будет повторно вводить эти настройки еще 6 раз при каждом открытии других приложений. Мы делаем это просто, вызывая UserDefaults(suiteName:), который возвращает словарь, который доступен для чтения / записи во всех приложениях 7 iOS, что довольно удобно и полезно. Есть ли Android java эквивалент этого? Мы не хотим, чтобы все наши Android пользователи были вынуждены вводить одну и ту же информацию 7 раз. Я попытался создать файл, который был бы доступен для чтения / записи, но не может найти подходящий каталог, к которому могут обращаться все 7 приложений.

1 Ответ

0 голосов
/ 07 января 2020

Мне пришлось написать хак для достижения этой функциональности, которая не была предпочтительной, но требование было необходимо. Я следовал за некоторыми из принятых ответов в этой теме , как предложено Моррисоном Чангом , но в итоге мне пришлось просмотреть l oop и сравнить, какой файл настроек был обновлен последним и затем внесите соответствующие изменения в приложение, запускающее код.

    public static SharedPreferences getSharedPreferences(Activity activity) {
        SharedPreferences prefs = activity.getApplicationContext().getSharedPreferences(SHARED_PREFS_KEY,
                Context.MODE_PRIVATE);
        long lastUpdate = prefs.getLong("lastUpdate", 0);
        Context packageContext;
        for (String app : new String[] { "app1", "app2", "app3", "app4", "app5", "app6" }) {
            try {
                packageContext = activity.createPackageContext(SHARED_PREFS_KEY + "." + app, 0);
                SharedPreferences sharedPrefs = packageContext.getSharedPreferences(SHARED_PREFS_KEY, Context.MODE_PRIVATE);
                long sharedLastUpdate = sharedPrefs.getLong("lastUpdate", 0);
                if (sharedPrefs != null && sharedLastUpdate > lastUpdate) {
                    SharedPreferences.Editor editor = prefs.edit();
                    editor.clear();
                    for (Map.Entry<String, ?> entry : sharedPrefs.getAll().entrySet()) {
                        if (entry.getValue() instanceof Boolean)
                            editor.putBoolean(entry.getKey(), (Boolean) entry.getValue());
                        else if (entry.getValue() instanceof Float)
                            editor.putFloat(entry.getKey(), (Float) entry.getValue());
                        else if (entry.getValue() instanceof Integer)
                            editor.putInt(entry.getKey(), (Integer) entry.getValue());
                        else if (entry.getValue() instanceof Long)
                            editor.putLong(entry.getKey(), (Long) entry.getValue());
                        else if (entry.getValue() instanceof String)
                            editor.putString(entry.getKey(), (String) entry.getValue());
                    }
                    editor.commit();
                    break;
                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }
        return prefs;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...