Obtenez le compte de messagerie principal du téléphone Android

Je travaille sur un projet, et je dois remplir EditText automatiquement avec le courrier électronique principal de l'utilisateur, je considère le courrier électronique principal comme le courrier électronique associé à Google Play Store. J'ai lu ce post et mis en œuvre cela,

Si nous utilisons la classe AccountManager pour obtenir les identifiants de messagerie, nous allons obtenir tous les identifiants de messagerie ajoutés dans ce téléphone, ce qui n'est pas possible, et certains disent de prendre le premier identifiant de courrier électronique retourné par AccountManager, mais cela renvoie le Identifiant de messagerie qui a été ajouté au téléphone pour la première fois.

  • Remplacer les ressources au moment de l'exécution
  • Vérification de la connexion Internet sur Android
  • Applications Fractales sur Android
  • Android NDK __android_log_print function andLogCat
  • Gradle Build est bloqué lors de l'exécution des tâches:
  • Conception des matériaux - Qu'entend-on «utiliser la teinte 700»?
  • C'est-à-dire, supposons que j'ai ajouté test@gmail.com et l'ai lié avec google play, puis j'ai ajouté test_new@gmail.com et j'ai associé ce compte au Play Store. En ce moment, j'utilise Play Store avec ce compte. Si j'ai écrit le code comme suit;

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

    La sortie attendue pour la déclaration est test_new@gmail.com , mais je reçois test@gmail.com

    Y a-t-il un moyen de résoudre ce problème?

    Aidez-moi à contribuer vos idées.

  • Les classes suivantes n'ont pas pu être créées: - com.google.android.gms.plus.PlusOneButton
  • Le message "Fichier de package n'a pas été enregistré correctement" - détecte si cela se produira ou non avec l'application Apache Google Play
  • Demandes de service Web sécurisé
  • Observable.empty () provoque java.util.NoSuchElementException: La séquence ne contient aucun élément
  • Pas de réponse du client distant: erreur lors du transfert de fichier à l'aide d'Asmack
  • Une alarme AlarmManager persiste si l'application est tuée par le système en raison d'une faible mémoire?
  • 4 Solutions collect form web for “Obtenez le compte de messagerie principal du téléphone Android”

    Dans la mesure où j'ai lu, il n'y a pas de concept d'identifiant de messagerie primaire dans Android. Et il n'y a aucun moyen d'obtenir un identifiant de messagerie associé à Play Store. Donc, ce que j'ai fait, j'ai récupéré tous les identifiants Gmail et pris le dernier, ce n'est pas l'identifiant principal, mais ce devrait être le premier compte Google ajouté dans son appareil. Donc, dans les cas d'utilisation normale, l'utilisateur ne jouera pas avec son premier identifiant de courrier électronique ajouté. Afin que nous puissions l'assumer comme identifiant de messagerie principal.

    Le compte que vous avez "associé à Play Store" est juste une préférence d'application de l'application Play. Vous ne pouvez pas lire cela. L'utilisateur peut télécharger / acheter certaines applications avec test et certaines avec test_new.

    Je suis d'accord avec @driodev. Mais je l'ai fait avec une approche différente. Il suffit de copier et coller le code …. je pourrais répondre à cette question un peu plus tard, mais je garantis que cela aidera beaucoup à l'avenir.infact je pense que nous pouvons obtenir n'importe quel identifiant de compte qui est utilisé dans le périphérique Android juste par Changer la chaîne dans getaccount ("com.example"). Voici le code.

     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; } 

    `

    Quelques ajouts à la réponse de @ MohammedNathar . Sur Android 6.0 et plus, n'oubliez pas de demander des autorisations, car ces versions sont paranoïaques:

    Manifeste:

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

    Demande:

     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; } } 

    Et en activité

     @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; } } 

    Ou vous pouvez le faire avec un "si" si vous le souhaitez.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.