getAccountsByType ("com.google") не может отобразить мою учетную запись Google для minSdkVersion 21 и targetSdkVersion 27 - PullRequest
0 голосов
/ 22 сентября 2018

Из документов Я пытаюсь получить Google Account на моем Nexus телефоне:

val am: AccountManager = AccountManager.get(this)
val myAccounts: Array<Account> = am.getAccountsByType("com.google")

Даже если у меня определенно есть учетная запись и я вижу журналы, ссылающиеся нанапример, I/TrustAgent: [HomeAddressChangeTracker] fetch for account myaddress@gmail.com И я добавил разрешения и подтвердил, что они предоставлены, массив всегда пуст.

У меня есть minSdkVersion 21 и targetSdkVersion 27

Есть идеи?

1 Ответ

0 голосов
/ 22 сентября 2018

Согласно изменениям в 8.0 , учетные записи недоступны только с разрешением GET_ACCOUNTS.Вы также должны потребовать, чтобы пользователь выбрал учетную запись, используя AccountManager.newChooseAccountIntent, например, так:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    if(checkSelfPermission(Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED) {
        val intent = AccountManager.newChooseAccountIntent(null, null, arrayOf("com.google"), null, null, null, null)
        startActivityForResult(intent, 42)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == 42) 
        val accountManager = AccountManager.get(this)
        val accounts = accountManager.getAccountsByType("com.google")
        accounts.forEach {
            Log.v(localClassName, it.toString())
        }
    }
}

Как указано в документации для AccountManager.newChooseAccountIntent:

Выбранная учетная запись помечается для вызывающего абонента как VISIBILITY_USER_MANAGED_VISIBLE (см. SetAccountVisibility (Account, String, int)) и будет возвращена ему при последующих вызовах getAccountsByType (String)).

, поэтому вам следует тольконеобходимо выбрать учетную запись один раз, а затем система должна запомнить этот выбор для последующих вызовов на AccountManager.getAccountsByType.

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