2015-04-22 3 views
1

Я пытаюсь получить электронную почту от ContactsContract.CommonDataKinds.Email.ADDRESS и ContactsContract.CommonDataKinds.Email.DATA, ContactsContract.CommonDataKinds.Email.DATA1, все они не возвращают электронную почту моего контакта, в котором содержится электронное письмо. Обычно я получаю номер телефона указанного контакта.ContactsContract.CommonDataKinds.Email. * Возвращает номер телефона

Все, что я пытался не удалось до сих пор ..

какие-либо идеи?

EDIT: То, что я пытался до сих пор ..

Uri contactData = data.getData(); 


        String[] projection = 
          { 
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
            ContactsContract.CommonDataKinds.Phone.NUMBER, 
            ContactsContract.CommonDataKinds.Email.ADDRESS 

          }; 

        Cursor cursor = getContentResolver().query(contactData,projection,null,null,null); 
        if(cursor.moveToFirst()){ 
         String phoneName = cursor.getString(2); 

         Log.d("EMAIL:",phoneName); 
        } 

Для ContactsContract.CommonDataKinds.Email.ADDRESS, я попытался заменить АДРЕСА с .DATA1, DATA, _ID, CONTACT_ID и т.д .. Ни одно из этих обратный адрес электронной почты, однако некоторые возвращают номер телефона контакта, но все.

+0

уверен, я отредактирую свое оригинальное сообщение и добавлю код. –

+0

спасибо @spaceghost. Я вернусь, если ваш вопрос соответствует стандартам. – madLokesh

+0

может отлаживать код и проверять, какие значения вы получаете в курсоре? – RobinHood

ответ

1

Не уверен, что случилось с вашим кодом, можете ли вы просто выполнить код ниже, чтобы получить адрес электронной почты конкретного контакта.

Пример код:

public String retrieveMailId(Context ctx, Uri contactUri) { 
      String email = null, contactId = null; 

      Cursor cursorID = ctx.getContentResolver().query(contactUri, 
        new String[] { ContactsContract.Contacts._ID }, null, null, 
        null); 

      if (cursorID == null) { 
       return null; 
      } 

      if (cursorID.moveToFirst()) { 

       contactId = cursorID.getString(cursorID 
         .getColumnIndex(ContactsContract.Contacts._ID)); 
      } 

      cursorID.close(); 

      if (TextUtils.isEmpty(contactId)) { 
       return null; 
      } 

      // Using the contact ID now we will get email address. 
      Cursor cursor = ctx.getContentResolver().query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " 
          + contactId, null, null); 

      if (cursor.moveToFirst()) { 
       int colIdx = cursor 
         .getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS); 
       email = cursor.getString(colIdx); 
      } 
      cursor.close(); 

      return email; 

     } 
+0

Спасибо, robinhood, я применил ваш метод отлично, однако, электронная почта возвращает нуль. Обратите внимание, что мой контакт, который я собираю, имеет электронное письмо. –

+0

Если ваш контакт не содержит адрес электронной почты, он возвращает null еще, вы получите адрес электронной почты. – RobinHood

+0

Я знаю. Мой контакт содержит 3 вещи. 1) номер телефона 2) номер телефона (с +) перед ним. 3) адрес электронной почты «[email protected]» –

2

В Вскоре, вам нужен другой курсор на E-mail:

Cursor emails = contentResolver.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + contactId, null, null); 
     while (emails.moveToNext()) 
     { 
      String email = emails.getString(emails.getColumnIndex(Email.DATA)); 
      break; 
     } 
     emails.close(); 

Надеется, что это поможет кому-то ...

0

я только как указать небольшой недостаток, когда дело доходит до получения идентификатора вашего контакта: не используйте ContactsContract.Contacts._ID, но вместо этого используйте ContactsContract.CommonDataKinds.Email.CONTACT_ID в массиве строк внутри вашего запроса. После извлечения идентификатора используйте следующую строку кода:

String id = cursor.getString(
    cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID) 
); 
Смежные вопросы