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