首页 > 代码库 > 获取用户Gmail账户

获取用户Gmail账户

有些时候我们需要获取当前手机上绑定的谷歌账户名,也就是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  文章写得通俗易懂,文档质量也很好,有图有代码有源码。


开源中国好像没法上传附件,需要的留邮箱好了:)