【问题标题】:Getting contactdetails from contact Id not working in android从联系人 ID 获取联系人详细信息在 android 中不起作用
【发布时间】:2015-07-16 07:00:31
【问题描述】:

您好,我正在处理联系人目录,我已经制作了自定义通话记录,不,我想在单击其中一个联系人时显示联系人详细信息,我首先从联系人号码中获取 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);

        }

    }

【问题讨论】:

  • 我想知道您是否忘记传递projection 进行查询。如果没有有效的projection,可能会导致您没有任何数据返回
  • 能否请您发布一些代码或编辑我的代码?提前谢谢。

标签: android android-contentprovider android-contacts contactscontract


【解决方案1】:

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

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"/>

【讨论】:

  • 它非常sloooow:将其与此进行比较:stackoverflow.com/a/26820544/2252830
  • 你好,谢谢你的回答,让我试试这个。
  • 你好,谢谢你的回答,它的工作,但你能告诉我如何找到组吗?
  • 这对我不起作用。我们在给定联系人 ID 的情况下检索联系电话号码和电子邮件的方式是否有任何变化。
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多