【发布时间】:2019-10-01 00:42:28
【问题描述】:
我是 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.login、com.facebook.auth.login 和 "com.linkedin.android 这样的第三方帐户。但是,我可以看到设备上登录的 gmail 帐户。如何在最近的 android 版本中检索此信息?
我还应该说我正在从 android 模拟器运行最新的 API 29,但不知道这是否是原因。我在模拟器中安装了linkedin、twitter和fb,并且也登录了那里。
我只需要得到与上面显示的结果相同的结果,但对于新的 android 版本。
【问题讨论】:
标签: android account accountmanager