Получение имени пользователя любого пользователя
В настоящее время я использую следующий код для получения текущего имени пользователя:
String username;
{
Cursor c = ctx.getContentResolver().query(Profile.CONTENT_URI,
new String[]{Profile.DISPLAY_NAME}, null, null, null);
if (c.getCount() > 0)
{
c.moveToFirst();
username = c.getString(0);
}
На моем тестовом устройстве (Samsung Galaxy Tab Pro) с правильными разрешениями это работает хорошо как для пользователя-владельца, так и для других пользователей без ограничений. Тем не менее, вещи, кажется, рушатся для ограниченных профилей пользователей:
- Код всегда возвращает нулевые строки курсора. Я надеялся, что включение доступа к приложению "Контакты" позволит ему работать, но это не имеет никакого эффекта.
- В любом случае, в отличие от неограниченных профилей, профиль ограниченной учетной записи пользователя, кажется, не связан с именем, отображаемым на экране блокировки, поэтому даже если бы я мог заставить этот код работать, я не уверен, насколько он полезен было бы.
Пожалуйста, прости вопрос из нескольких частей, но:
- Это особенность планшета Samsung, или это поведение одинаково на разных устройствах?
- Есть ли способ прочитать профиль ограниченного пользователя?
- Есть ли лучший способ получить текущее имя пользователя?
Любое понимание приветствуется.
1 ответ
Я пытался найти информацию об этом и могу сказать, что невозможно получить подробную информацию о "Ограниченный профиль (пользователь)".
В фоновом режиме, когда вы пытаетесь прочитать детали для "Ограниченный профиль пользователя", они пытаются изменить в базе данных и выбрасывают SQLiteexception : delete then re-write existing database throws SQLiteReadOnlyDatabaseException on getWritableDatabase
, из-за этого исключения я не думаю, что есть шанс прочитать имя пользователя.
Без использования вышеуказанного кода вы можете напрямую позвонить getUsername()
класса UserManager.[Уровень API 17]