вывести в консоль количество аккаунтов привязанных к телефону. Runtime permission
Прошу подсказки более опытных коллег, мне нужно вывести кол-во привязанных аккаунтов к телефону в консоль , я для этого использую AccountManager :
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");
Log.i("Size", "Size: " + accounts.length);
if (ContextCompat.checkSelfPermission(AccountActivity.this, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
return;
}
Разрешения:
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
В итоге получаю 0, поискав информацию в интернете стало понятно , что не хватает разрешений, но разрешения прописываются в рантайме. Попробовал не получилось. Как корректно прописать запрос в рантайме ? Может еще каких то разрешений не хватает ? 3 дня борюсь с 3 строчками кода...
Ответы (1 шт):
Автор решения: nikitavidnov
→ Ссылка
Причина оказалась в том , что permission GET_ACCOUNTS устарел! Вероятно GET_ACCOUNTS на старых версиях Андроид сработает но на новых версия нужно использовать READ_CONTACTS , обязательно в рантайм. Код прикрепляю ниже.
if (checkSelfPermission(android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
||
(ContextCompat.checkSelfPermission(AccountActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
)
{
requestPermissions(new String[]{android.Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();
Log.i("acount", String.valueOf(accounts.length));
for(Account account: accounts)
{
Log.i("acount", String.valueOf(account));
//делаем что- то
}