2015-09-08 3 views
11

Я работаю над проектом, и я должен заполнить EditText автоматически основным электронным письмом пользователя, я рассматриваю первичный адрес электронной почты как письмо, связанное с магазином игры Google. Я прочитал сообщение this и внедрил, чтополучить основную учетную запись электронной почты телефона android

Если мы используем класс AccountManager для получения идентификаторов электронной почты, мы получим все идентификаторы электронной почты, добавленные в этот телефон, так что это невозможно, а некоторые говорят, что первый идентификатор электронной почты, возвращаемый AccountManager, но который возвращает идентификатор электронной почты, который был добавлен в телефон в первый раз.

, т. Е. Предположим, что я добавил [email protected] и связал это с google play, позже я добавил [email protected] и связал эту учетную запись с магазином воспроизведения, прямо сейчас я использую игровой магазин с этой учетной записью , если я написал код следующим образом;

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

ожидаемые из положить для утверждения [email protected], но я получаю [email protected]

есть ли способ решить эту проблему?

, пожалуйста, помогите мне внести свой вклад в ваши идеи.

+1

Ожидаемый результат для заявления [email protected], но я получаю [email protected]? –

+0

опечатка, ожидается выход является электронный идентификатор, который связан с игровой магазин, здесь [email protected] – droidev

+1

Вы можете попробовать this..it было отвечено уже [здесь] [1] [1] : http://stackoverflow.com/questions/2112965/how-to-get-the-android-devices-primary-e-mail-address – Thiyagu

ответ

7

Насколько я понимаю, в андроиде нет понятия первичного идентификатора электронной почты. и нет способа получить идентификатор электронной почты, связанный с магазином воспроизведения. так что я сделал это, я выбрал все идентификаторы gmail и взял последний, это не основной идентификатор электронной почты, но он должен быть первым добавленным аккаунтом google на его устройстве. поэтому в обычных случаях использования пользователь не будет играть со своим первым добавленным идентификатором электронной почты. поэтому мы можем считать его основным идентификатором почты.

2

Учетная запись, которую вы «связали с Play Марком», является преимуществом приложения Play для приложения. Вы не можете это прочитать. Пользователь может загрузить/купить некоторые приложения с тестом, а некоторые - с test_new.

1

Я согласен с @driodev. но я сделал это с другим подходом. просто скопируйте и вставьте код .... я могу ответить на этот вопрос немного поздно, но я гарантирую, что это будет полезно для многих в будущем. В результате я думаю, что мы можем получить любой идентификатор учетной записи, который используется в устройстве Android просто путем изменения строки в getaccount («com.example»). Вот код.

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

Я пробовал это, но почему я все время получаю null для своего устройства Android, когда я его печатаю? Мое устройство работает только в одной учетной записи Google, gmail. – DaveNOTDavid

+0

Вы добавили разрешение в манифест !! вы проверяли ошибку опечатки для ex в вышеперечисленном «com.google», у меня было это как «com.gogle» для wile, я не мог понять, где проблема. Мне было бы полезно, если бы вы могли предоставить код snippet –

+0

Это должно быть разрешение в манифесте

0

Некоторые дополнения к @ ответ MohammedNathar в. На Android 6.0 и выше, не забывайте просить разрешения, потому что эти версии являются некоторые параноика:

Manifest:

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

Запрос:

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

И активность

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

Или вы можете сделать это с помощью одного «если», если вы хотите.

0

Всякий раз, когда пользователь назначает email_id, андроид создает календарь с помощью электронной почты. Поэтому, если вышеприведенное решение не оказалось для вас, вы можете попробовать это как взломать. Найдите адрес электронной почты, связанный с календарем. Надеюсь, это поможет.

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