Android - Получить список пользователей и имя профиля
Мы можем создать несколько пользователей и профилей на устройствах Android, например, есть Основной пользователь, и я также установил Рабочий Профиль с именем "Рабочий Профиль".
Используя следующую команду adb:
adb shell pm list users
Я получаю этот результат:
UserInfo {0: Мой пользователь:13} запущен UserInfo{10: Рабочий профиль:30} запущен
Хорошо, я вижу свою информацию о пользователе с именем Рабочий профиль. Теперь я хочу получить этот список из моего приложения.
Я пытался использовать этот код:
for(Account account: AccountManager.get(this).getAccounts()) {
DebugLog.e("COUCOU " + account.name + " " + account.toString());
}
Но учетная запись рабочего профиля не отображается в списке. Только основной пользователь... Любая идея, как я мог получить тот же список, что и команда оболочки ADB??
1 ответ
Вы путаете пользователей с аккаунтами. То, что вы используете, получит только учетные записи текущего пользователя.
Устройство может иметь несколько пользователей, которые эквивалентны пользователям на компьютере.
Пользователь может иметь несколько учетных записей, например, Gmail, Facebook, Twitter и т. Д. Учетные записи могут совместно использоваться пользователями или нет.
Для получения дополнительной информации по этой теме, посетите официальную страницу поддержки нескольких пользователей.
Вы можете обрабатывать пользователей с помощью UserManager, и вы можете получить список профилей текущего пользователя, используя getUserProfiles, но вы получите UserHandle (который вы можете использовать для получения userId), как получить список всех пользователей и имя это то, что я еще не узнал, но в худшем случае вы можете использовать команду оболочки pm, как показано в этом посте о многопользовательских учетных записях на Android.
Если у вас есть root-доступ к вашему устройству или вы можете создать свое приложение как системное привилегированное приложение, вы можете использовать белый список привилегированных разрешений, чтобы получить android.permission.MANAGE_USERS
разрешение (которое также требует подписи вашего приложения с подписью платформы). Затем вы можете получить список всех пользовательских данных, позвонив UserManager.getUsers()
используя отражение Java.