2015-04-30 13 views
2

В настоящее время я использую следующий код, чтобы получить имя текущего пользователя:получения имени пользователя любого пользователя

 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, или это поведение согласуется на разных устройствах?
  • Есть ли способ прочитать профайл ограниченного пользователя?
  • Есть ли лучший способ получить имя текущего пользователя?

Любое понимание оценено.

+0

Это поможет вам http://stackoverflow.com/questions/2727029/how-can-i-get -the-google-username-on-android –

+0

Нет, я не ищу адрес электронной почты. –

+0

У вас есть разрешение на чтение данных профиля? –

ответ

1

Я попытался найти об этом & может сказать, что невозможно получить информацию о «Ограниченный профиль (Пользователь)».

В фоновом режиме, когда вы пытаетесь прочитать подробности для «Пользователь ограниченного профиля», они пытаются изменить базу данных и выкинуть SQLiteexception : delete then re-write existing database throws SQLiteReadOnlyDatabaseException on getWritableDatabase. из-за этого исключения я не думаю, что есть шанс прочитать имя пользователя.

Без использовать код выше, вы можете получить непосредственно вызывать getUsername()UserManager из класса. [API Level 17]

+0

К сожалению, по причинам, неизвестным и, возможно, непознаваемым, 'getUserName()' требует разрешения MANAGE_USERS, что невозможно получить для приложений SDK. –

+0

Не решает проблему, но я буду ее продвигать –

+0

Да, если у нас есть кусок кода, то почему мы должны пойти на более высокий уровень. Дайте мне знать, если вам повезет. –