Конечно, этот код требует правильной обработки исключений, которые я оставил для удобства чтения.

м приложении мне нужно знать, есть ли учетная запись 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 ...). Мне не нужно знать, сколько, если это так, и не нужна информация об учетных записях.

Ответы на вопрос(3)

Ваш ответ на вопрос