gpt4 book ai didi

android - 获取所有类型的帐户 Android API 29

转载 作者:行者123 更新时间:2023-12-05 00:13:46 33 4
gpt4 key购买 nike

我是 android 的新手,正在尝试获取 android 用户在他/她的设备中注册的帐户列表。我已经使用 android 的客户经理按如下方式执行此操作:

public static int count;
count=0;
JSONArray jsonArr = new JSONArray();
JSONObject emailObj = new JSONObject();
Account[] accounts = AccountManager.get(mContext).getAccounts();
//Account[] accounts = AccountManager.get(mContext).getAccountsByType(null);
for (Account account : accounts) {
//possibleEmail += " "+account.name+" : "+account.type+" \n";

JSONObject elem = new JSONObject();
elem.put("name", account.name);
elem.put("type", account.type);
jsonArr.put(elem);
//possibleEmail += " "+account.name+" \n";
count++;
emailObj.put("list",jsonArr);

}

例如,上面的代码适用于 API 级别 23。我得到的帐户列表如下:

[{"name":"agmailaccount@gmail.com","type":"com.google"},{"name":"agmailaccount2@gmail.com","type":"com.google"},{"name":"agmailaccount3@gmail.com","type":"com.google"},{"name":"handler","type":"com.twitter.android.auth.login"},{"name":"Facebook","type":"com.facebook.auth.login"},{"name":"LinkedIn","type":"com.linkedin.android"}]

请注意,我可以检测用户是否登录了第三方应用程序。我确实安装了 linkedin、fb 和 twitter,并且我从我的设备登录了这些平台。我只需要捕获这个(如上面的列表所示),而不是实际的帐户名称。

重点是,当我对 Android API 级别 29 使用相同的代码时,它不会返回第三方帐户,如 com.twitter.android.auth.logincom.facebook .auth.login"com.linkedin.android。但是,我可以看到在设备上登录的 gmail 帐户。如何在最新的 android 版本中检索此信息?

我还应该说,我正在从 Android 模拟器运行最新的 API 29,但不知道这是否是原因所在。我在模拟器中安装了 linkedin、twitter 和 fb,并且我也在那里登录。

我只需要获得与上面显示的相同的结果,但对于新的 android 版本。

最佳答案

一般来说,不可以,您无法在较新的设备上以编程方式访问其他应用的帐户。

根据 API 26 Behavior changes :

In Android 8.0 (API level 26), apps can no longer get access to user accounts unless the authenticator owns the accounts or the user grants that access. The GET_ACCOUNTS permission is no longer sufficient. To be granted access to an account, apps should either use AccountManager.newChooseAccountIntent() or an authenticator-specific method. After getting access to accounts, an app can can call AccountManager.getAccounts() to access them.

因此,您应该特别要求用户使用 newChooseAccountIntent()(可追溯到 API 14 的 API)选择一个帐户,以便用户可以授予您访问他们想要的特定帐户的权限提供给您的应用。

如同一页所述,有 new AccountManager APIs允许拥有帐户的特定应用程序控制是否向任何其他应用程序隐藏帐户或向其显示帐户。这可以解释为什么您可以访问以前能够获得的某些子集。

关于android - 获取所有类型的帐户 Android API 29,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58176780/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com