¿Cómo se obtiene la dirección de correo electrónico principal de Android (o una lista de direcciones de correo electrónico)?
Tengo entendido que en OS 2.0+ hay soporte para múltiples direcciones de correo electrónico, pero por debajo de 2.0 solo puede tener una dirección de correo electrónico por dispositivo.
Respuestas:
Hay varias formas de hacer esto, que se muestran a continuación.
Como advertencia amistosa, tenga cuidado y sea sincero con el usuario cuando maneje datos de cuenta, perfil y contacto. Si utiliza indebidamente la dirección de correo electrónico de un usuario u otra información personal, pueden ocurrir cosas malas.
Método A: usar AccountManager (API nivel 5+)
Puede usar
AccountManager.getAccounts
uAccountManager.getAccountsByType
obtener una lista de todos los nombres de cuenta en el dispositivo. Afortunadamente, para ciertos tipos de cuenta (incluidoscom.google
), los nombres de las cuentas son direcciones de correo electrónico. Fragmento de ejemplo a continuación.Tenga en cuenta que esto requiere el
GET_ACCOUNTS
permiso:AccountManager
Puede encontrar más información sobre el uso en el código de muestra de Contact Manager en el SDK.Método B: usar ContactsContract.Profile (API nivel 14+)
A partir de Android 4.0 (Ice Cream Sandwich), puede obtener las direcciones de correo electrónico del usuario accediendo a su perfil. Acceder al perfil de usuario es un poco pesado, ya que requiere dos permisos (más sobre eso a continuación), pero las direcciones de correo electrónico son datos bastante confidenciales, por lo que este es el precio de admisión.
A continuación se muestra un ejemplo completo que utiliza un
CursorLoader
para recuperar filas de datos de perfil que contienen direcciones de correo electrónico.Esto requiere los permisos
READ_PROFILE
yREAD_CONTACTS
:fuente
cursor.isAfterLast()
siempre devuelve verdadero. ¿Alguna idea?Esto podría ser útil para otros:
Usar AccountPicker para obtener la dirección de correo electrónico del usuario sin ningún permiso global, y permitir que el usuario conozca y autorice o cancele el proceso.
fuente
Usaría AccountPicker de Android , introducido en ICS.
Y luego espera el resultado:
fuente
fuente
android.permission.GET_ACCOUNTS
, que se define como permiso 'peligroso' (requiere solicitud de tiempo de ejecución): developer.android.com/reference/android/…Hay una API de Android que permite al usuario seleccionar su dirección de correo electrónico sin la necesidad de un permiso. Echa un vistazo a: https://developers.google.com/identity/smartlock-passwords/android/retrieve-hints
Esto mostrará un selector donde el usuario puede seleccionar una dirección de correo electrónico. El resultado será entregado en
onActivityResult()
fuente
La respuesta tristemente aceptada no está funcionando.
Llego tarde, pero aquí está la solución para la aplicación interna de correo electrónico de Android a menos que el proveedor cambie la uri de contenido:
fuente
Esto es bastante complicado en Android y aún no lo he hecho. Pero tal vez estos enlaces puedan ayudarte:
fuente
Usa este método:
Tenga en cuenta que esto requiere el
GET_ACCOUNTS
permiso:Entonces:
fuente
Las respuestas sugeridas ya no funcionarán, ya que hay una nueva restricción impuesta desde Android 8 en adelante.
Más información aquí: https://developer.android.com/about/versions/oreo/android-8.0-changes.html#aaad
fuente
Android se bloqueó
GET_ACCOUNTS
recientemente, por lo que algunas de las respuestas no me funcionaron. Esto funciona en Android 7.0 con la advertencia de que sus usuarios tienen que soportar un diálogo de permiso.AndroidManifest.xml
MainActivity.java
fuente
Trabajando en el sistema operativo MarshMallow
fuente
Agregue esta línea única en manifiesto ( para permiso )
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Luego pegue este código en su actividad
fuente