Конечно, этот код требует правильной обработки исключений, которые я оставил для удобства чтения.
м приложении мне нужно знать, есть ли учетная запись Google или Samsung.
До Android 7 было легко получить эту информацию с чем-то вроде:
Account[] accounts = AccountManager.get(getContext())
.getAccountsByType("com.google")
Но с событиемOreo
это больше не работает.
РЕДАКТИРОВАТЬ: см. Официальную информацию по этому вопросу:В Android 8.0 (уровень API 26) приложения больше не могут получать доступ к учетным записям пользователей, если только аутентификатор не владеет учетными записями или пользователь не предоставляет такой доступ. Разрешение GET_ACCOUNTS больше не достаточно. Чтобы получить доступ к учетной записи, приложения должны использовать AccountManager.newChooseAccountIntent () или метод проверки подлинности. После получения доступа к учетным записям приложение может вызвать AccountManager.getAccounts () для доступа к ним. Android 8.0 устарела LOGIN_ACCOUNTS_CHANGED_ACTION. Вместо этого приложения должны использовать addOnAccountsUpdatedListener () для получения обновлений об учетных записях во время выполнения. Для получения информации о новых API и методах, добавленных для доступа к учетной записи и обнаружения, посмотрите Доступ к учетной записи и Обнаружение в разделе Новые API этого документа
Я потратил полдня, чтобы найти решение моей потребности, но безуспешно.
Я нашел информацию о том, что теперь единственный способ получить доступ к аккаунтам - это использоватьAccountPicker
нравится:
AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},true, null, null, null, null);
Но это отвечает моей проблеме. Для ясности мне нужно только знать, существует ли учетная запись для определенного типа (Google, Samsung ...). Мне не нужно знать, сколько, если это так, и не нужна информация об учетных записях.