擷取使用者Gmail賬戶

來源:互聯網
上載者:User

標籤:android   http   java   os   2014   io   

有些時候我們需要擷取當前手機上綁定的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 requestCode, int resultCode, Intent data) {    if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {      String gmail = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);    }  }

3 最後一種方式實現稍複雜:

這裡引用一位印度開發人員的文章:androidhive  文章寫得通俗易懂,文檔品質也很好,有圖有代碼有源碼。


開源中國好像沒法上傳附件,需要的留郵箱好了:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.