Obtener la dirección de correo electrónico del propietario de Android muy bien
Quiero permitir que el usuario me proporcione su dirección de correo electrónico sin escribirlo. Lo ideal sería que hubiera un campo de texto donde el usuario podría escribir una dirección de correo electrónico o pulsar un botón para rellenarlo automáticamente.
En una pregunta anterior, Roman Nurik sugiere usar un AccountManager para manejar esto, pero eso requiere que mi aplicación use el privilegio GET_ACCOUNTS; Mi aplicación podría acceder a todas las cuentas del usuario en el dispositivo, incluyendo sus cuentas de Facebook / Twitter. Ese permiso parece demasiado amplio para lo que quiero.
- Android 2.3: Sistema de archivos de sólo lectura pegado
- Uses-permission vs permission para los permisos de android en el archivo manifest.xml
- Usando ParseFacebookUtils.logInWithReadPermissionsInBackground no guarda los permisos de Facebook Android
- ADB obtener un permiso denegado a pesar de correr como root
- android internet no funciona
¿Hay una manera más agradable de manejar esto que no requiere la concesión de mi app un permiso tan pesado?
- Determinación del nivel de permiso de Android
- Configuración. Comportamiento de la API del sistema en la API de Android nivel 23
- ¿Hay alguna herramienta para proteger una aplicación de malware aún más que los permisos otorgados en Android?
- ¿Puede un Servicio de Android tener permisos múltiples?
- ¿Por qué el comando SQLite 3 que usa la shell ADB de Android devuelve "permiso denegado"?
- ¿Es posible eliminar permisos de una aplicación de Android?
- "DIBUJAR SOBRE OTRA APLICACIÓN" es qué permiso en android
- Android openFileOutput - no hay permiso para crear almacenamiento
De hecho, no sólo no puede hacer esto sin GET_ACCOUNTS, la información que desea sólo existe en los datos de la cuenta del usuario (Google).
En mi teléfono Sprint, la dirección del propietario 'sprint asigna es [email protected]
, y que se puede ver usando getprop
de un shell. Pero esa no es mi dirección de correo electrónico principal, ni siquiera una que use / chequee. Lo que quieres es mi dirección de gmail, y eso está almacenado en los datos de la cuenta de Android.
En realidad, usted quiere uno de los dos – que es otra razón que necesita GET_ACCOUNTS. Si vas a pedir mi dirección de correo electrónico, debes permitirme seleccionar entre las dos cuentas @ gmail.com que he configurado en el dispositivo. Sé cuál es mi "preferido" (aunque incluso eso es contextual), pero AFAIK ni es considerado por el sistema como más "primario" o "predeterminado" que el otro.
Sé que estoy demasiado tarde, pero esto puede ser útil para otros.
Creo que la mejor manera de auto-rellenar un campo de correo electrónico ahora es mediante el uso de AccountPicker
Si tu aplicación tiene el permiso GET_ACCOUNTS y sólo hay una cuenta, la obtienes de inmediato. Si su aplicación no lo tiene, o si hay más de una cuenta, los usuarios reciben un mensaje para que puedan autorizar o no la acción.
Tu aplicación debe incluir los Servicios de Google Play, pero no necesita ningún permiso.
Todo este proceso fallará en versiones anteriores de Android (se requiere 2,2 o más), o si Google Play no está disponible, por lo que debería considerar ese caso.
He aquí un ejemplo de código básico:
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); } }
Un enfoque alternativo podría ser encontrar el nombre de usuario de Google asociado con el dispositivo, desde el cual se puede reconstruir una dirección de [email protected]
, pero que todavía requiere el uso de AccountManager. Consulte Acceso al ID / nombre de cuenta de Google a través de Android .
No hay una buena forma de acceder a la información de la cuenta del usuario (correo electrónico) sin solicitar el permiso GET_ACCOUNTS. Todos los derechos reservados
- Android Gradle reemplaza Nombre del paquete por un valor en manifiesto
- Android listview obtiene el elemento seleccionado