Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting Android owner's email address nicely

I want to allow the user to provide me their email address without typing it in. Ideally, there'd be a text field where the user could either type an email address or push a button to autofill it.

In an earlier question, Roman Nurik suggests using an AccountManager to handle this, but that requires my app to use the GET_ACCOUNTS privilege; my app could then access all of the user's accounts on the device, including their Facebook/Twitter accounts. That permission seems way too broad for what I want.

Is there a nicer way to handle this that doesn't require granting my app such a heavy duty permission?

like image 815
Dan Fabulich Avatar asked Jun 28 '11 05:06

Dan Fabulich


People also ask

How do I find my primary email address on my Android phone?

Method A: Use AccountManager (API level 5+)getAccounts or AccountManager. getAccountsByType to get a list of all account names on the device. Fortunately, for certain account types (including com. google ), the account names are email addresses.

Can Android apps see my email address?

Email addresses were the most common piece of PII shared with apps and were shared with 48 percent of the iOS apps and 44 percent of the Android apps analyzed.


1 Answers

I know I'm way too late, but this might be useful to others.

I think the best way to auto-populate an email field now is by using AccountPicker

If your app has the GET_ACCOUNTS permission and there's only one account, you get it right away. If your app doesn't have it, or if there are more than one account, users get a prompt so they can authorize or not the action.

Your app needs to include the Google Play Services auth library com.google.android.gms:play-services-auth but it doesn't need any permissions.

This whole process will fail on older versions of Android (2.2+ is required), or if Google Play is not available so you should consider that case.

Here's a basic code sample:

    private static final int REQUEST_CODE_EMAIL = 1;     private TextView email = (TextView) findViewById(R.id.email);      // ...      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) {         // TODO     }      // ...      @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);             email.setText(accountName);         }     } 
like image 91
Jorge Cevallos Avatar answered Oct 08 '22 12:10

Jorge Cevallos