标签:android http java os 2014 io
有些时候我们需要获取当前手机上绑定的谷歌账户名,也就是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 requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
String gmail = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
}
}
3 最后一种方式实现稍复杂:
这里引用一位印度开发者的文章:androidhive 文章写得通俗易懂,文档质量也很好,有图有代码有源码。
开源中国好像没法上传附件,需要的留邮箱好了:)
标签:android http java os 2014 io
原文地址:http://my.oschina.net/zxc1991/blog/288119