代码之家  ›  专栏  ›  技术社区  ›  Dave Chambers

getAccountsByType(“com.google”)无法列出我在MinSDK版本21和TargetSDK版本27上的google帐户

  •  5
  • Dave Chambers  · 技术社区  · 6 年前

    docs 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 回复  |  直到 6 年前
        1
  •  2
  •   Community Bayu Bramantya    4 年前

    changes in 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.getAccountsByType