Android: get user ID without requiring scary (for user) permissions?

后端 未结 4 1323
天涯浪人
天涯浪人 2021-02-04 04:33

In order to manage user preferences, at present I\'m grabbing the google user name (effectively the email address they\'ve registered to the device) and using (a hash of) that a

4条回答
  •  不知归路
    2021-02-04 05:14

    If you use Google Play Services you can get the account type and account name without any extra permissions.

    First, add the following dependency to build.gradle:

    compile 'com.google.android.gms:play-services-auth:8.4.0'
    

    Next, launch the account chooser intent:

    Intent intent = AccountPicker.newChooseAccountIntent(null, null,
        new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE},
        false, null, null, null, null);
    
    try {
      startActivityForResult(intent, REQUEST_CODE_EMAIL);
    } catch (ActivityNotFoundException e) {
      // This device may not have Google Play Services installed.
      // TODO: do something else
    }
    

    Finally, override onActivityResult to get the account type and account name:

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
        String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
        // TODO: do something with the accountName
        return;
      }
      super.onActivityResult(requestCode, resultCode, data);
    }
    

    source: https://stackoverflow.com/a/19444640/1048340

提交回复
热议问题