Android - Споделени предпочитания в профили

Има ли начин за достъп до SharedPreferences в потребителски профили на Android?

Например, ако UserA направи промяна в предпочитанията на приложението, искам тази промяна да бъде достъпна и за UserB. Опитах се да използвам текстов файл, записан на път getFilesFir(), и го прочетох от различен акаунт, но когато userA напише файл, той не е достъпен за userB. Пиша файловете с MODE_PRIVATE, тъй като MODE_WORLD_READABLE и MODE_WORLD_WRITABLE са остарели, но не съм сигурен, че използването им ще помогне за начало.

Някой знае ли дали има начин да се централизират предпочитанията за моите настройки на приложението, така че да могат да се споделят между всички потребители? Искам да избегна да записвам нещо на SD картата.


person Ali    schedule 11.09.2013    source източник
comment
Случвало ли ви се е да работите? Имам същия проблем   -  person Tim    schedule 21.04.2016
comment
В крайна сметка написах файл на външно хранилище. Използвах facebook conceal, за да го криптирам. Работи като чар, не е идеалното решение, но е сигурно. Ако искате да видите кода, който използвах, можете да го намерите тук.   -  person Ali    schedule 26.04.2016


Отговори (4)


не можеш Само SD картата не налага потребителско разрешение.

person regisd    schedule 13.02.2016

Може да искате да се запознаете с правилата в играта, когато няколко потребители са добавени към устройство в този документ, в раздела Ефекти. Трябва да е очевидно, че това, което се опитвате да постигнете, ще бъде „творческо решение“ или просто невъзможно.

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

Да приемем, че приложенията за потребителски екземпляри просто нямат достъп едно до друго. Може би биха могли да споделят някои съоръжения на системно ниво, които са достъпни от всички приложения през цялото време, независимо кой е активният потребител? Единственото нещо, което ми хрумва, докато пиша това, е DropBoxManager. За съжаление не е надеждно постоянен, тъй като има ограничения за това колко може да съхранява и тези ограничения могат да доведат до изтласкване на вашите данни от опашката по всяко време, преди да могат да бъдат прочетени от другото приложение. Освен това данните там са по същество публични, което може да не е това, което искате.

Ако искате да се побъркате, можете да посетите отново ContentProviders и по някакъв начин да използвате доставчиците на системно ниво за календар или контакти, за да скриете данни, стига и двете приложения да знаят как да намерят тайния специален запис. Диви неща.

Друго решение може да бъде да съхранявате всичките си данни на някакъв сървър и да накарате всеки потребител да въведе някакъв ключ, за да може да локализира и чете/записва вашето петно ​​от данни на сървъра. Ако не е ръчен ключ, опитайте да използвате някое „уникално“ свойство на устройството като ключ. Това вероятно е най-доброто решение, тъй като имате повече гаранция, че нещо случайно няма да изтрие или изложи вашите данни.

person Doug Stevenson    schedule 19.02.2016

Използването на 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();
person toro    schedule 19.02.2016

Решение би било да предоставите на доставчик на съдържание персонализирани разрешения и дефинирайте протокол за запазване и възстановяване на предпочитания от този доставчик на съдържание.

person Radu Ionescu    schedule 19.02.2016