Obtenir l’adresse email du propriétaire Android

Je veux autoriser l’utilisateur à me fournir son adresse e-mail sans la saisir. Idéalement, il devrait y avoir un champ de texte où l’utilisateur pourrait saisir une adresse e-mail ou appuyer sur un bouton pour le remplir automatiquement.

Dans une question antérieure, Roman Nurik suggère d’utiliser un AccountManager pour gérer cela, mais cela nécessite que mon application utilise le privilège GET_ACCOUNTS; mon application pourrait alors accéder à tous les comptes de l’utilisateur sur l’appareil, y compris leurs comptes Facebook / Twitter. Cette permission semble trop large pour ce que je veux.

Existe-t-il une meilleure façon de gérer cela, qui ne nécessite pas d’accorder une telle permission à mon application?

En effet, non seulement vous ne pouvez pas le faire sans GET_ACCOUNTS, les informations que vous souhaitez n’existent que dans les données du compte de l’utilisateur (Google).

Sur mon téléphone Sprint, l’adresse du propriétaire du sprint est [email protected] , et peut être vue à l’aide de getprop partir d’un shell. Mais ce n’est pas mon adresse e-mail principale, ni même celle que j’utilise / vérifie. Ce que vous voulez, c’est mon adresse gmail, et celle-ci est stockée dans les données du compte Android.

En fait, vous voulez l’ un des deux – ce qui est une autre raison pour laquelle vous avez besoin de GET_ACCOUNTS. Si vous souhaitez demander mon adresse e-mail, vous devez me laisser choisir parmi les deux comptes @ gmail.com que j’ai configurés sur l’appareil. Je sais lequel est mon «préféré» (même si c’est contextuel), mais le système considère AFAIK non plus comme «primaire» ou «par défaut» que l’autre.

Je sais que je suis bien trop tard, mais cela pourrait être utile aux autres.

Je pense que la meilleure façon de remplir automatiquement un champ de messagerie est d’utiliser AccountPicker.

Si votre application a l’autorisation GET_ACCOUNTS et qu’il n’y a qu’un seul compte, vous l’obtenez immédiatement. Si votre application ne l’a pas, ou s’il ya plusieurs comptes, les utilisateurs reçoivent une invite pour autoriser ou non l’action.

Votre application doit inclure les services Google Play, mais ne nécessite aucune autorisation.

Tout ce processus échouera sur les anciennes versions d’Android (2.2+ est requirejs), ou si Google Play n’est pas disponible, vous devriez donc considérer ce cas.

Voici un exemple de code de base:

  private static final int REQUEST_CODE_EMAIL = 1; private TextView email = (TextView) findViewById(R.id.email); // ... try { Intent intent = AccountPicker.newChooseAccountIntent(null, null, new Ssortingng[] { 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) { Ssortingng accountName = data.getSsortingngExtra(AccountManager.KEY_ACCOUNT_NAME); email.setText(accountName); } } 

Une autre approche pourrait consister à trouver le nom d’utilisateur Google associé à l’appareil, à partir duquel vous pouvez reconstruire une adresse [email protected], mais cela nécessite toujours l’utilisation de AccountManager. Reportez -vous à la section Accès à l’ID de compte / nom d’utilisateur Google via Android .

Il n’y a pas de moyen simple d’accéder aux informations de compte d’utilisateur (courrier électronique) sans demander l’autorisation GET_ACCOUNTS. 🙂