从联系人ID获取contactdetails不在android中工作

时间:2015-07-16 07:00:32

标签: android android-contentprovider android-contacts contactscontract

您好我正在联系人目录,我已经制作了自定义通话记录,Noe我想在点击其中一个联系人时显示联系人详细信息,我首先从联系人号码中获取contact_id,然后通过搜索通过互联网我有一个功能,以从联系人ID获取所有详细信息,我已将它放在我的代码中,但它不工作,不给我结果,

public void getDetials(String contactID) {
        Uri myPhoneUri = Uri.withAppendedPath(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                Uri.encode(contactID));

        // Query the table
        @SuppressWarnings("deprecation")
        Cursor phoneCursor = managedQuery(myPhoneUri, null, null, null, null);

        // Get the phone numbers from the contact
        for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor
                .moveToNext()) {

            // Get a phone number
            String phoneNumber = phoneCursor
                    .getString(phoneCursor
                            .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

            //get name
            String phonename = phoneCursor
                    .getString(phoneCursor
                            .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));




            //get email
            String phoneemail = phoneCursor
                    .getString(phoneCursor
                            .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Email.DATA));

            //get image uri..!!
            String img_uri = phoneCursor
                    .getString(phoneCursor
                            .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
            System.out
                    .println("=============my phone number ,is==================="
                            + phoneNumber + "======in call info=="+"\n =========name is===="+phonename+"=================email is========"+phoneemail);
            System.out.println("======myimgae url fopr the contact is============="+img_uri);

        }

    }

1 个答案:

答案 0 :(得分:0)

以下是阅读指定联系人的所有电话号码和电子邮件的方法:

public void getContactDetails(int contactId) {
    Log.d("Details", "---");
    Log.d("Details", "Contact : " + contactId);
    final Cursor phoneCursor = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[] {
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.CommonDataKinds.Phone.PHOTO_URI,
            },
            Data.CONTACT_ID + "=?",
            new String[] {String.valueOf(contactId)}, null);

    try {
        final int idxAvatarUri = phoneCursor.getColumnIndexOrThrow(
                ContactsContract.CommonDataKinds.Phone.PHOTO_URI);
        final int idxName = phoneCursor.getColumnIndexOrThrow(
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
        final int idxPhone = phoneCursor.getColumnIndexOrThrow(
                ContactsContract.CommonDataKinds.Phone.NUMBER);

        while (phoneCursor.moveToNext()) {
            String phoneNumber = phoneCursor.getString(idxPhone);
            String name = phoneCursor.getString(idxName);
            String avatarUri = phoneCursor.getString(idxAvatarUri);

            Log.d("Details", "Phone number: " + phoneNumber);
            Log.d("Details", "Name: " + name);
            Log.d("Details", "Avatar URI: " + avatarUri);
        }
    } finally {
        phoneCursor.close();
    }

    final Cursor emailCursor = getContentResolver().query(
            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            new String[] {
                    ContactsContract.CommonDataKinds.Email.ADDRESS,
            },
            Data.CONTACT_ID + "=?",
            new String[] {String.valueOf(contactId)}, null);

    try {
        final int idxAddress = emailCursor.getColumnIndexOrThrow(
                ContactsContract.CommonDataKinds.Email.ADDRESS);
        while (emailCursor.moveToNext()) {
            String address = emailCursor.getString(idxAddress);
            Log.d("Details", "Email: " + address);
        }
    } finally {
        emailCursor.close();
    }
}

请注意,单个联系人可以容纳多个电话号码和电子邮件。

以下是获取所有联系人详细信息的方法:

final Cursor cur = getContentResolver().query(Data.CONTENT_URI,
        new String[]{Data.CONTACT_ID}, null, null, null);
try {
    final int idxId = cur.getColumnIndex(Data.CONTACT_ID);
    while (cur.moveToNext()) {
        final int id = cur.getInt(idxId);
        getContactDetails(id);
    }
} finally {
    cur.close();
}

不要忘记添加权限:

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