2010-03-31 25 views
33

Tengo android.permission.READ_OWNER_DATA pero no encuentro ningún código confiable que explique cómo puedo leer la dirección de correo electrónico del propietario del dispositivo. ¿Cómo puedo hacer esto?¿Cómo se puede obtener la dirección de correo electrónico de un usuario de Android?

+1

Ver esta pregunta: http://stackoverflow.com/questions/2112965/how-to-get-the-android- devices-primary-e-mail-address –

+1

Mi código es para más de 2 versiones de Android, pero espero que ayude a alguien. Recibe el nombre del propietario, el correo electrónico y el teléfono (el usuario puede tener un correo electrónico además de la cuenta de sincronización). Probado en android 2.3 https://gist.github.com/3904299 – Jehy

+4

¿Por qué se cierran las buenas preguntas? Estoy empezando a ver esto más y más. –

Respuesta

90

¿Por qué quieres hacer eso?

import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.content.Context; 

/** 
* This class uses the AccountManager to get the primary email address of the 
* current user. 
*/ 
public class UserEmailFetcher { 

    static String getEmail(Context context) { 
    AccountManager accountManager = AccountManager.get(context); 
    Account account = getAccount(accountManager); 

    if (account == null) { 
     return null; 
    } else { 
     return account.name; 
    } 
    } 

    private static Account getAccount(AccountManager accountManager) { 
    Account[] accounts = accountManager.getAccountsByType("com.google"); 
    Account account; 
    if (accounts.length > 0) { 
     account = accounts[0];  
    } else { 
     account = null; 
    } 
    return account; 
    } 
} 

En su AnroidManifest.xml

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
+0

Esto se ve muy bien ... pero necesito algo que funcione con Android 1.5? ¿Tienes alguna clase para una API más antigua en tu manga? – kape123

+2

Esto no funcionará en Android 1. * Me temo. Si le resulta cómodo, puede usarlo en una aplicación que apunta a 1.5 y detectar limpiamente cuando la funcionalidad no está disponible con intente con { String name = UserEmailFetcher.getEmail (this); } catch (VerifyError e) {// sucede si el administrador de cuentas no está disponible (por ejemplo 1.x) } Se necesitaría en su manifiesto. –

+0

Está escondido, tendrás que usar el reflejo para obtenerlo. No lo haga si realmente lo necesita. – alexanderblom

0

Trabajando en marshmallow Versión

btn_click = (Button) findViewById (R.id.btn_click);

btn_click.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) 
    { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
     { 
      int permissionCheck = ContextCompat.checkSelfPermission(PermissionActivity.this, 
        android.Manifest.permission.CAMERA); 
      if (permissionCheck == PackageManager.PERMISSION_GRANTED) 
      { 
       //showing dialog to select image 
       String possibleEmail=null; 

       Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ 
       Account[] accounts = AccountManager.get(PermissionActivity.this).getAccounts(); 
       for (Account account : accounts) { 
        if (emailPattern.matcher(account.name).matches()) { 
         possibleEmail = account.name; 
         Log.e("keshav","possibleEmail"+possibleEmail); 
        } 
       } 

       Log.e("keshav","possibleEmail gjhh->"+possibleEmail); 
       Log.e("permission", "granted Marshmallow O/S"); 

      } else {      ActivityCompat.requestPermissions(PermissionActivity.this, 
         new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE, 
           android.Manifest.permission.READ_PHONE_STATE, 
           Manifest.permission.GET_ACCOUNTS, 
           android.Manifest.permission.CAMERA}, 1); 
      } 
     } else { 

// Bajo continuación, Marshmallow

   String possibleEmail=null; 

       Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ 
       Account[] accounts = AccountManager.get(PermissionActivity.this).getAccounts(); 
       for (Account account : accounts) { 
        if (emailPattern.matcher(account.name).matches()) { 
         possibleEmail = account.name; 
         Log.e("keshav","possibleEmail"+possibleEmail); 
       } 
       Log.e("keshav","possibleEmail gjhh->"+possibleEmail); 
     } 
    } 
}); 

+0

** ** –

Cuestiones relacionadas