从联系人列表中获取电子邮件地址

5
我通过授权获取联系人列表。
android:name="android.permission.READ_CONTACTS"


Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);

但是如何从中获取电子邮件地址?
 public void onActivityResult(int reqCode, int resultCode, Intent data) {
//what should i have to write to fetch email address of selected contact
// I wrote like below but i could not get result

 if (resultCode == Activity.RESULT_OK) {  
     try{
             Uri contactData = data.getData();

             Cursor cursorEmail = getContentResolver().query(contactData,null,null,null,null);
             cursorEmail.moveToFirst();
             String emailAdd =  cursorEmail.getString(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
             Toast.makeText(MySettings.this, emailAdd, Toast.LENGTH_LONG).show();
          }catch(Exception e){
              Toast.makeText(MySettings.this, "No Email Add found", Toast.LENGTH_LONG).show();
          }

}

但问题是我无法从所选联系人列表中获取电子邮件地址,有人能给我解决方案吗?
3个回答

10
您可以使用以下代码来获取电子邮件。
public ArrayList<String> ShowContact() {        

    nameList = new ArrayList<String>();
            phoneList = new ArrayList<String>();
            emailList = new ArrayList<String>();

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(cur
                    .getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            if (Integer
                    .parseInt(cur.getString(cur
                            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                // Query phone here. Covered next

                Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = ?", new String[] { id }, null);
                while (pCur.moveToNext()) {
                    // Do something with phones
                    String phoneNo = pCur
                            .getString(pCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    nameList.add(name); // Here you can list of contact.
                        phoneList.add(phoneNo); // Here you will get list of phone number.                  


                    Cursor emailCur = cr.query( 
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                            null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                            new String[]{id}, null); 
                        while (emailCur.moveToNext()) { 
        String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));                            

                 emailList.add(email); // Here you will get list of email    

                        } 
                        emailCur.close();       
                }
                pCur.close();
            }
        }
    }

    return nameList; // here you can return whatever you want.
}

您好,Akshay先生,我使用了您的代码,但仍然出现错误。 Cursor cursorContacts = managedQuery(contactData, null, null, null, null); String id = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts._ID)); Cursor emailCur = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",new String[]{id}, null); - user1545066
@user1545066 如果你在模拟器上测试,请确保已经在模拟器中添加了带有电子邮件地址的联系人。如果出现错误,请问是什么错误。 - Akshay
@user1545066,我已经修改了我的帖子,请查看更改内容。请告诉我它是否有效。 - Akshay
我想从列表中仅检索所选记录。因为列表中有多个记录。请提供解决方案。 - Anand Savjani

2

获取所选联系人电子邮件ID的函数

private void retrieveContactEmail()
{
    Cursor cursorID = getContentResolver().query(uriContact,
        new String[]{ContactsContract.Contacts._ID},
        null, null, null);

    if (cursorID.moveToFirst()) {
        contactID = cursorID.getString(
            cursorID.getColumnIndex(ContactsContract.Contacts._ID));
    }

    Cursor cursor = getContentResolver().query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=?",
        new String[]{contactID}, null);

    int emailIdx = cursor.getColumnIndex(
        ContactsContract.CommonDataKinds.Email.DATA);

    if (cursor.moveToFirst()) {
        String emailg = cursor.getString(emailIdx);

        if(emailg!=null) {
            email.setText(emailg);
        }
        else {
            Toast.makeText(Activity.this,
                "No email id for this contact",
                Toast.LENGTH_LONG
            ).show();
        }
    }
}

1

使用

String emailAdd =  cursorEmail.getString(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

替代

String emailAdd =  cursorEmail.getString(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接