Se Android adresse email du propriétaire de bien
Je veux permettre à l'utilisateur de me donner leur adresse e-mail sans avoir à taper dans. Idéalement, il y aurait un champ de texte où l'utilisateur peut soit taper une adresse email ou d'appuyer sur un bouton pour le remplissage automatique il.
Dans une question précédente, Roman Nurik suggère d'utiliser un AccountManager pour gérer cela, mais cela nécessite de mon application utilise la GET_ACCOUNTS privilège; mon application pourrait alors accéder à tous les comptes de l'utilisateur sur l'appareil, y compris leur Facebook/Twitter. Cette autorisation semble trop large pour ce que je veux.
Est-il une meilleure façon de gérer ce qui ne nécessite pas l'octroi de mon application, par exemple un lourd permission?
- Une chose que j'ai remarqué après avoir poser la question, c'est que le GET_ACCOUNTS privilège est souvent caché dans le "Plus de Détails" de la section; il n'apparaît pas dans la liste des privilèges au-dessus du pli. Si la plupart des utilisateurs ne sera pas un avis si vous en demander la permission.
- Pensez-vous vraiment GET_ACCOUNTS est si lourd? Vous en avez besoin pour GCM (au moins si vous voulez soutenir < v4.0.4).
- Avez-vous besoin de demander une autorisation de trop? L'utilisateur peut désactiver?
Vous devez vous connecter pour publier un commentaire.
Je sais que je suis trop en retard, mais cela peut être utile à d'autres.
Je pense que la meilleure façon de remplir automatiquement un champ e-mail est maintenant en utilisant AccountPicker
Si votre application a la GET_ACCOUNTS la permission, et il n'y a qu'un seul compte, vous obtenez tout de suite. Si votre application ne l'a pas, ou si il y a plus d'un compte, les utilisateurs d'obtenir une invite de sorte qu'ils peuvent autoriser ou non l'action.
Votre application doit inclure les Google Play Services mais il n'a pas besoin de toutes les autorisations.
L'ensemble de ce processus échoue sur les anciennes versions d'Android (2.2+) ou si le Google Play n'est pas disponible donc vous devriez envisager ce cas.
Voici un code de base de l'échantillon:
En effet, non seulement ne peut pas vous faire cela sans GET_ACCOUNTS, les informations que vous souhaitez n'existe que dans l'utilisateur (Google) les données de compte.
Sur mon téléphone Sprint, le "propriétaire" de l'adresse de sprint ayants droit est
[email protected]
, et qui peut être vu à l'aide degetprop
à partir d'un shell. Mais ce n'est pas mon adresse e-mail principale, ou même que j'ai jamais utiliser/vérifier. Ce que vous voulez est mon adresse gmail, et qui est stocké dans l'Android de données de compte.En fait, vous voulez l'un des deux — ce qui est une autre raison, vous avez besoin GET_ACCOUNTS. Si vous allez demander mon adresse e-mail, vous devez me laisser choisir parmi les deux @gmail.com les comptes que j'ai configuré sur le périphérique. Je de savoir lequel est mon préféré' un (même si c'est contextuelle), mais autant que je sache ni qui est considéré par le système pour être plus "primaire" ou "par défaut" que l'autre.
Une approche alternative pourrait être de trouver le nom d'utilisateur Google associé à l'appareil, à partir de laquelle vous pouvez reconstruire une
[email protected]
adresse, mais qui nécessite encore de l'utilisation de la AccountManager. Voir Accéder à Google Id de Compte /nom d'utilisateur via Android.Il n'y a pas de bonne façon de l'accès au compte de l'utilisateur (e-mail) des informations, sans demander l'GET_ACCOUNTS autorisation. 🙂