2015-09-08 16 views
11

Sto lavorando a un progetto e devo compilare EditText automaticamente con l'email principale dell'utente, sto considerando l'email principale come l'e-mail associata a Google Play Store. Ho letto il post this e l'ho implementato,ottenere l'account di posta elettronica primario del telefono Android

se usiamo la classe AccountManager per ottenere gli ID di e-mail, otterremo tutti gli ID di e-mail aggiunti in quel telefono, quindi non è possibile, e alcuni dicono di prendere il primo ID e-mail restituito da AccountManager, ma che restituisce l'ID e-mail aggiunto al telefono per la prima volta.

ie, supponiamo di aver aggiunto [email protected] e collegato quello con google play, in seguito ho aggiunto [email protected] e associato questo account con Play Store, in questo momento sto usando play store con questo account . se ho scritto il codice come segue;

 Account[] accountList = AccountManager.get(this).getAccountsByType("com.google"); 
    Log.d("Play store account:" , accountList[0].name); 

l'atteso fuori ha messo per l'istruzione è [email protected], ma sto ottenendo [email protected]

c'è un modo per risolvere questo problema?

per favore aiutami a contribuire con le tue idee.

+1

previsto per la dichiarazione è [email protected], ma sto ottenendo [email protected]? –

+0

errore di battitura, risultato atteso è l'id e-mail che associata a Play Store, qui è [email protected] – droidev

+1

Si può provare this..it è stato già risposto [qui] [1] [1] : http://stackoverflow.com/questions/2112965/how-to-get-the-android-devices-primary-e-mail-address – Thiyagu

risposta

7

Per quanto ho letto, non esiste alcun concetto di ID e-mail primario in Android. e non c'è modo di ottenere l'ID e-mail associato al Play Store. quindi quello che ho fatto è che ho recuperato tutti gli ID di Gmail e preso l'ultimo, non è l'id principale, ma dovrebbe essere il primo account Google aggiunto nel suo dispositivo. quindi, in normali casi d'uso, l'utente non giocherà con il suo primo ID email aggiunto. quindi possiamo assumerlo come ID di posta principale.

2

L'account che hai "associato al Play Store" è solo una preferenza dell'app dell'app Play. Non puoi leggerlo. L'utente può scaricare/acquistare alcune app con test e altre con test_new.

1

sono d'accordo con @driodev. ma l'ho fatto con un approccio diverso. basta copiare e incollare il codice .... potrei rispondere a questa domanda un po 'tardi, ma garantisco che questo sarà di aiuto a molti in futuro.infatti penso che possiamo ottenere qualsiasi ID account che viene utilizzato nel dispositivo Android solo cambiando la stringa in getaccount ("com.example"). Ecco il codice.

String User_EmailId = getEmiailID(getApplicationContext()); 

private String getEmiailID(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; 
}  

`

+0

Ho provato questo, ma perché è che ottengo sempre null per il mio dispositivo Android quando lo stampo? Il mio dispositivo è in esecuzione solo su un account Google, Gmail. – DaveNOTDavid

+0

hai aggiunto il permesso in manifest !! hai controllato per errore di battitura, diciamo per esempio nel precedente "com.google" lo stavo avendo come "com.gogle" per un wile non riuscivo a capire dove fosse il problema .. Sarei utile se potessi fornire il tuo snippet di codice –

+0

questo dovrebbe essere il permesso nel manifest

0

Alcune aggiunte a @ risposta di MohammedNathar. Su Android 6.0 e versioni successive, non dimenticate di chiedere i permessi, in quanto questa versione sono alcuni paranoico:

manifesto:

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

Richiesta:

private void requestPermissions(Activity activity) { 
    if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.GET_ACCOUNTS}, 101); 
     return null; 
    } 
} 

E in attività

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    boolean result = false; 
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
     result = true; 
    switch (requestCode) { 
     case 101: 
      if (result) Log.d(Constants.LOG, "Permission GET_ACCOUNTS granted"); 
      break; 
    } 
} 

Oppure puoi farlo con un "se" se tu vuoi.

0

Ogni volta che l'utente assegna email_id, allora Android crea un calendario con E-mail. Se la soluzione di cui sopra non risulta per te allora puoi provare questo come hack. Trova email associata al calendario. Spero che questo aiuti.

public String getCalendarIdAndEmail(Context c) { 

    String projection[] = {"_id", "calendar_displayName"}; 
    // Uri calendars = Uri.parse("content://com.android.calendar/calendars"); 
    String calID = null; 
    try { 
     ContentResolver contentResolver = c.getContentResolver(); 

     if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) { 
      return calID; 
     } 
     Cursor managedCursor = contentResolver.query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1 AND " + CalendarContract.Calendars.IS_PRIMARY + "=1", null, CalendarContract.Calendars._ID + " ASC"); 
     if (managedCursor.getCount() <= 0) { 
      managedCursor = contentResolver.query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC"); 
     } else { 
      Log.d("getCount", "" + managedCursor.getCount()); 
     } 

     if (managedCursor.moveToFirst()) { 

      int nameCol = managedCursor.getColumnIndex(projection[1]); 
      int idCol = managedCursor.getColumnIndex(projection[0]); 
      do { 
       String calName = managedCursor.getString(nameCol); 
       calID = managedCursor.getString(idCol); 
       //CalName is Email id you are looking for 
       Log.e("tag", "calName " + calName + "____calId " + calID); 

      } while (managedCursor.hasNext());//managedCursor.moveToNext()); 
      managedCursor.close(); 
     } 
    } catch (Exception e) { 
     Log.e("error", e.getMessage();); 
    } 
    return calID; 
}