如何从Android设备联系人获取电子邮件地址?

时间:2015-01-15 09:13:06

标签: android email android-contentprovider

我需要从设备联系人处获取电子邮件地址。

我试过这个来获取电子邮件地址。

        Cursor cur1 = cr.query(
                ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                new String[] { device_contactId }, null);

但上面的代码无效。

我使用以下代码插入电子邮件。

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
                            .withValueBackReference(Data.RAW_CONTACT_ID, rawContactID)
                        .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                            .withValue(ContactsContract.CommonDataKinds.Email.DATA, emailArr[i])
                            .withValue(ContactsContract.CommonDataKinds.Email.TYPE, _emailType)
                            .build());

请帮帮我。 建议表示赞赏。 谢谢亲切的问候。

2 个答案:

答案 0 :(得分:1)

这是从所选联系人中获取电子邮件地址的代码

public void doLaunchContactPicker(View view) {
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
if (resultCode == RESULT_OK) {
    switch (requestCode) 
    {
    case CONTACT_PICKER_RESULT:
        Cursor cursor = null;
        String email = "", name = "";
        try {
            Uri result = data.getData();
            Log.v(DEBUG_TAG, "Got a contact result: " + result.toString());

            // get the contact id from the Uri
            String id = result.getLastPathSegment();

            // query for everything email
            cursor = getContentResolver().query(Email.CONTENT_URI,  null, Email.CONTACT_ID + "=?", new String[] { id }, null);

            int nameId = cursor.getColumnIndex(Contacts.DISPLAY_NAME);

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

            // let's just get the first email
            if (cursor.moveToFirst()) {
                email = cursor.getString(emailIdx);
                name = cursor.getString(nameId);
                Log.v(DEBUG_TAG, "Got email: " + email);
            } else {
                Log.w(DEBUG_TAG, "No results");
            }
        } catch (Exception e) {
            Log.e(DEBUG_TAG, "Failed to get email data", e);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
            EditText emailEntry = (EditText) findViewById(R.id.editTextv);
            EditText personEntry = (EditText) findViewById(R.id.person);
            emailEntry.setText(email);
            personEntry.setText(name);
            if (email.length() == 0 && name.length() == 0) 
            {
                Toast.makeText(this, "No Email for Selected Contact",Toast.LENGTH_LONG).show();
            }
        }
        break;
    }

} else {
    Log.w(DEBUG_TAG, "Warning: activity result not ok");
}
}

doLaunchContactPicker 是按钮的onclick

要返回包含电子邮件ID的姓名的arraylist,请使用此代码。

public ArrayList<String> getNameEmailDetails(){
    ArrayList<String> names = 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));
            Cursor cur1 = cr.query( 
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                            new String[]{id}, null); 
            while (cur1.moveToNext()) { 
                //to get the contact names
                String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                Log.e("Name :", name);
                String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                Log.e("Email", email);
                if(email!=null){
                    names.add(name);
                }
            } 
            cur1.close();
        }
    }
    return names;
}

别忘了添加

<uses-permission android:name="android.permission.READ_CONTACTS" />
AndroidManifest.xml中的

答案 1 :(得分:0)

 Uri contactData = data.getData();
                Cursor c = getContentResolver().query(contactData, null, null, null, null);
                if (c.moveToFirst()) {
                    String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                    String hasNumber = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                    String email = "";
                    if (Integer.valueOf(hasNumber) == 1) {
                        Cursor numbers = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                        while (numbers.moveToNext()) {
                            email = numbers.getString(numbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                            if(getEmail(email).isEmpty()){
                                Toast.makeText(this, "Email Not Found In That Contact Try Another", Toast.LENGTH_SHORT).show();
                            }
                            else {
                                edt_email_contact.setText("" + getEmail(email));
                            }                            }
                    }
                }
                break;
            }