Comment obtenir l'adresse e-mail principale d'Android (ou une liste d'adresses e-mail)?
Je crois comprendre que sur OS 2.0+, il existe un support pour plusieurs adresses e-mail, mais en dessous de 2.0, vous ne pouvez avoir qu'une seule adresse e-mail par appareil.
Réponses:
Il existe plusieurs façons de procéder, indiquées ci-dessous.
Comme avertissement amical, soyez prudent et direct envers l'utilisateur lorsqu'il traite des données de compte, de profil et de contact. Si vous abusez de l'adresse e-mail d'un utilisateur ou d'autres informations personnelles, de mauvaises choses peuvent se produire.
Méthode A: utiliser AccountManager (API niveau 5+)
Vous pouvez utiliser
AccountManager.getAccounts
ouAccountManager.getAccountsByType
pour obtenir une liste de tous les noms de compte sur l'appareil. Heureusement, pour certains types de comptes (y compriscom.google
), les noms de compte sont des adresses e-mail. Exemple d'extrait ci-dessous.Notez que cela nécessite l'
GET_ACCOUNTS
autorisation:Pour plus d'informations sur l'utilisation,
AccountManager
consultez l' exemple de code Contact Manager dans le SDK.Méthode B: utilisez ContactsContract.Profile (API niveau 14+)
Depuis Android 4.0 (Ice Cream Sandwich), vous pouvez obtenir les adresses e-mail de l'utilisateur en accédant à son profil. L'accès au profil utilisateur est un peu lourd car il nécessite deux autorisations (plus d'informations ci-dessous), mais les adresses e-mail sont des données assez sensibles, c'est donc le prix d'admission.
Voici un exemple complet qui utilise un
CursorLoader
pour récupérer les lignes de données de profil contenant des adresses e-mail.Cela nécessite à la fois les autorisations
READ_PROFILE
etREAD_CONTACTS
:la source
cursor.isAfterLast()
renvoie toujours vrai. Une idée?Cela pourrait être utile à d'autres:
Utiliser AccountPicker pour obtenir l'adresse e-mail de l'utilisateur sans aucune autorisation globale et permettre à l'utilisateur d'être informé et d'autoriser ou d'annuler le processus.
la source
J'utiliserais AccountPicker d'Android , introduit dans ICS.
Et puis attendez le résultat:
la source
la source
android.permission.GET_ACCOUNTS
, qui est défini comme une autorisation «dangereuse» (nécessite une demande d'exécution): developer.android.com/reference/android/…Il existe une API Android qui permet à l'utilisateur de sélectionner son adresse e-mail sans avoir besoin d'une autorisation. Jetez un œil à: https://developers.google.com/identity/smartlock-passwords/android/retrieve-hints
Cela montrera un sélecteur où l'utilisateur peut sélectionner une adresse e-mail. Le résultat sera livré en
onActivityResult()
la source
La réponse malheureusement acceptée ne fonctionne pas.
Je suis en retard, mais voici la solution pour l'application de messagerie Android interne, sauf si l'URI du contenu est modifié par le fournisseur:
la source
C'est assez compliqué à faire dans Android et je ne l'ai pas encore fait. Mais peut-être que ces liens peuvent vous aider:
la source
Utilisez cette méthode:
Notez que cela nécessite l'
GET_ACCOUNTS
autorisation:Alors:
la source
Les réponses suggérées ne fonctionneront plus car une nouvelle restriction est imposée à partir d'Android 8.
plus d'informations ici: https://developer.android.com/about/versions/oreo/android-8.0-changes.html#aaad
la source
Android s'est verrouillé
GET_ACCOUNTS
récemment, donc certaines des réponses n'ont pas fonctionné pour moi. J'ai obtenu que cela fonctionne sur Android 7.0 avec la mise en garde que vos utilisateurs doivent supporter une boîte de dialogue d'autorisation.AndroidManifest.xml
MainActivity.java
la source
Travailler dans le système d'exploitation MarshMallow
la source
Ajouter cette seule ligne dans le manifeste ( pour autorisation )
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Collez ensuite ce code dans votre activité
la source