获取用户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 第一种方式:
2 第二种方式
这种方式必须要求有google play services的库,这个库可以在sdk manager中进行下载,不过鉴于长城的影响,这个很难下载,最好是找一个离线的直接放到android sdk下。主要代码逻辑如下:
3 最后一种方式实现稍复杂:
这里引用一位印度开发者的文章:androidhive 文章写得通俗易懂,文档质量也很好,有图有代码有源码。
开源中国好像没法上传附件,需要的留邮箱好了:)
有些时候我们需要获取当前手机上绑定的谷歌账户名,也就是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 文章写得通俗易懂,文档质量也很好,有图有代码有源码。
开源中国好像没法上传附件,需要的留邮箱好了:)
相关文章推荐
- 如何获取特定用户组内的无效账户?
- (C#)与Windows用户账户信息的获取
- 谷歌测试多账户登陆 用户可同时登陆多个Gmail
- 获取Windows用户所有的账户名
- post提交的数据有哪几种编码格式?能否通过URL参数获取用户账户密码
- (C#)与Windows用户账户信息的获取
- Android——第三方登录——新浪微博——获取用户信息——账户绑定
- 浅谈.NET(C#)与Windows用户账户信息的获取
- 如何获取特定用户组内的无效账户?
- 获取用户账户状态 Monxin专用(PHP代码函数)
- UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息
- UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息
- 获取用户需求的十大沟通技巧
- 获取JavaScript用户自定义类的类名称
- 获取数据库用户表的方法
- 免邀请获取Gmail,自己去拿
- 获取oracle中某一用户某一表空间下的表、列注释说明的SQL查询语句
- 获取用户计算机信息
- 获取用户需求的十大沟通技巧