Android – SharedPreferences через профили

Есть ли способ получить доступ к SharedPreferences через профили пользователей на Android?

Например, если UserA изменит настройки приложений, я хочу, чтобы это изменение также было доступно для UserB. Я попытался использовать текстовый файл, записанный на путь getFilesFir() и прочитать его из другой учетной записи, но когда userA пишет файл, он недоступен для пользователяB. Я пишу файлы с MODE_PRIVATE так как MODE_WORLD_READABLE и MODE_WORLD_WRITABLE устарели, но я не уверен, что с их помощью это поможет.

Кто-нибудь знает, есть ли способ централизовать настройки для моих настроек приложения, чтобы он мог использоваться всеми пользователями? Я хочу, чтобы ничего не было на SD-карте.

Вы не можете. Только SD-карта не обеспечивает прав пользователя.

Возможно, вам захочется ознакомиться с правилами игры, когда несколько пользователей добавляются к устройству в этом документе в разделе «Эффекты» . Должно быть очевидно, что то, что вы пытаетесь выполнить, будет «творческим обходным путем» или просто невозможным.

Итак, какие средства Android существуют для приложений для обмена данными, которые не являются файловой системой? Ну, обычный механизм – ContentProvider , но я подозреваю, что два изолированных экземпляра приложения не могут получить доступ к ContentProviders друг друга (и, кроме того, как бы вы сказали им отдельно?).

Предположим, что приложения пользовательского экземпляра просто не могут получить доступ друг к другу. Может быть, они могут делиться некоторыми системами уровня, которые доступны всем приложениям все время независимо от того, кто является активным пользователем? Единственное, что происходит со мной, когда я пишу это, – DropBoxManager . К сожалению, он не является надежным, поскольку существует ограничение на то, сколько он может хранить, и эти ограничения могут привести к тому, что ваши данные будут выталкиваться из очереди в любое время, прежде чем они смогут быть прочитаны другим экземпляром приложения. Кроме того, данные там, по существу, общедоступны, что может быть не таким, каким вы хотите.

Если вы хотите сходить с ума, вы можете вернуться к ContentProviders и каким-то образом использовать поставщиков системного уровня для календаря или контактов для хранения данных, если оба приложения знают, как найти секретную специальную запись. Дикие вещи.

Другим решением может быть хранение всех ваших данных на каком-то сервере, и каждый пользователь вводит какой-то ключ, чтобы иметь возможность размещать и читать / писать свой блок данных на сервере. Если нет ручного ключа, попробуйте использовать в качестве ключа какое-либо «уникальное» свойство устройства . Это, пожалуй, лучшее решение, поскольку у вас есть больше гарантии того, что что-то случайно не удалит или не разоблачит ваши данные.

Использовать getSharedPreferences () с MODE_PRIVATE должно быть достаточно. Единственное, что вам нужно – это использовать контекст приложения. Таким образом, ваши общие настройки будут доступны из всех ваших действий независимо от текущего пользователя.

 String PREFS_NAME = "com.your_application"; Context context = getApplicationContext(); 

Прочтите пример предпочтения:

 SharedPreferences reader; reader = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); reader.getInt("name1", 3); 

Пример предпочтения записи:

 SharedPreferences.Editor writer; writer = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit(); writer.putString("name2", "string").apply(); 

Решение заключалось бы в предоставлении поставщику контента пользовательских разрешений и определении протокола для сохранения и восстановления предпочтений этого поставщика контента.

Intereting Posts
Как показать PopupWindow в специальном месте? NotificationCompat.setStyle () не может получить Notification.MediaStyle Как объединить аудиофайл с новым видеофайлом? Возможно ли это в android? Любые текстовые редакторы с открытым исходным кодом для Android? Событие прослушивания Android onTouch Как изменить некоторое значение в .java-файле из build.gradle? PreferenceActivity с несколькими файлами предпочтений Комната Android: каждая переменная привязки в запросе должна иметь соответствующий метод Не удалось открыть устройство HAX (Android) Запрос MediaStore для Android MediaStore.MediaColumns.TITLE столбец для некоторых файлов имеет значение null Ошибка приложения на HttpLoggingInterceptor Лучший способ получить местоположение пользователя GPS в фоновом режиме на Android Выделение выделенного элемента в расширяемом списке Наложение наложения Android поверх всех окон, которые получают штрихи Приложение для перезапуска Android Kill