您的位置:首页 > 大数据 > 人工智能

获取用户Gmail账户

2014-07-07 00:00 369 查看
摘要: 有三种方式获取用户gmail账户名:1 android自带API 2 google play services 3 通过google+

有些时候我们需要获取当前手机上绑定的谷歌账户名,也就是Gmail账户名,以便标记不同用户。

现在我发现主要有三种方式获取gmail账户:

1 android 自带API

这种方式最简单,最容易实现,但是这种方式需要一个GET_ACCOUNTS的用户权限,在stackoverflow 上说这个权限是a heavy duty permission. 因为有这个权限之后,不仅是设备上的Gmail账户,其他账户都可以暴露在程序中,而有时我们仅仅只需要gmail账户。而据我观察这个API在设备同时关联了两个Gmail的情况下无法区分哪个是主账户。

2 google play service

这种方式避免了上面所提及的权限问题,但是这种方式也有一个小小的问题,就是他获取的方式是发起一个Intent,这个Intent会创建一个Dialog,然后让你选择一个账户,通过这种方式获取到gmail账户

3 google+

这种方式其实是第二种方式的延续,并且还会需要第一种方式的权限,这种方式的好处是不仅可以获取用户Gmail还可以获取其他如用户头像、google+u上的昵称等其他信息。在本文中,这种方式不做重点介绍,只是附带一个链接,那个链接中已经讲的非常详尽并且还有源码(我也会附上)。

下面来详细说明前两种的实现方式:

1 第一种方式:

public static String getEmail(Context context) {
AccountManager accountManager = AccountManager.get(context);
Account[] accounts = accountManager.getAccountsByType("com.google");//获取google账户
Account account = accounts.length > 0 ? accounts[0] : null;//取第一个账户
return account == null ? null : account.name;
}

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

2 第二种方式

这种方式必须要求有google play services的库,这个库可以在sdk manager中进行下载,不过鉴于长城的影响,这个很难下载,最好是找一个离线的直接放到android sdk下。主要代码逻辑如下:

if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext())) {
try {
Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE },
false, null, null, null, null);
startActivityForResult(intent, REQUEST_CODE_EMAIL);
} catch (ActivityNotFoundException e) {
}
}
}

activity result:
private static final int REQUEST_CODE_EMAIL = 1;
@Override
protected void onActivityResult(int reque
7fe0
stCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
String gmail = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
}
}

3 最后一种方式实现稍复杂:

这里引用一位印度开发者的文章:androidhive 文章写得通俗易懂,文档质量也很好,有图有代码有源码。

开源中国好像没法上传附件,需要的留邮箱好了:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息