获取联系人照片

时间:2012-01-04 18:43:49

标签: android contacts

我在收到联系人照片时遇到问题,您在短信应用中看到的那种和新的Gmail通知。我看了几个示例代码,但没有任何对我有用,这就是我目前所拥有的

这应该得到照片uri并将其转换为要使用的位图图像,或者至少看起来像

public static Bitmap getContactImage(long id,Context context){
    InputStream input = getPhoto(id,context);
    if(input == null){
        return null;
    }
    return BitmapFactory.decodeStream(input);
}

public static InputStream getPhoto(long contactId,Context context){
    Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
    Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
    InputStream in = null;
    try{
        in = context.getContentResolver().openInputStream(photoUri);
    }catch(FileNotFoundException e){
        Log.d(TAG, e.toString());
    }
    return in;
}

这就是我打电话的方式

long contactID = 0;
                Bitmap image = BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_contact_picture);
                Cursor contact = context.getContentResolver().query(Data.CONTENT_URI,new String[] {Data.CONTACT_ID},Email.ADDRESS  + "='" + from + "'",null,null);
                if(contact.moveToFirst() && contact != null){
                    contactID = contact.getLong(0);
                    image = getContactImage(contactID,context);
                }

我的联系人ID很好(通过搜索查询人员的号码来检查)但是却找不到联系人照片。我知道有一张照片,因为我正在对自己进行测试,以确保我有一张联系人照片,所以我不知道还应该做些什么。

我总是觉得导航联系提供商非常麻烦,因为它有很多东西。

3 个答案:

答案 0 :(得分:1)

我知道了,我使用RAW_CONTACT_IDMIMETYPE进行了查询,并向我提供了我正在寻找的照片

Cursor p = context.getContentResolver().query(Data.CONTENT_URI,new String[] {Photo.PHOTO},
                Data.RAW_CONTACT_ID + "=" + contactId + " AND " + Data.MIMETYPE + "='" + Photo.CONTENT_ITEM_TYPE+"'"
                ,null,null);

答案 1 :(得分:0)

这适合我。

//Querying for all contacts(Apply selection parameter in query to get a specific contact)

Uri contacts = ContactsContract.Contacts.CONTENT_URI;

cur = null;
cur = Main.context.getContentResolver().query(contacts, null, null,
                    null, null);    

int contactIdIndex = cur.getColumnIndex(ContactsContract.PhoneLookup._ID);
int contactId = cur.getInt(contactIdIndex);

//照片

    Uri contactUri = ContentUris.withAppendedId(
                    ContactsContract.Contacts.CONTENT_URI, contactId);

            Uri photoUri = Uri.withAppendedPath(contactUri,
                    ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);

            Cursor cursor = cr
                    .query(
                            photoUri,
                            new String[] { ContactsContract.CommonDataKinds.Photo.PHOTO },
                            null, null, null);

            if (cursor != null && cursor.moveToFirst()) {
                byte[] data = cursor.getBlob(0);

                _conEntry.setPhoto(data);
//Data is the photo bytes for you

            }

            if (cursor != null)
                cursor.close();

答案 2 :(得分:0)

你做错了。

首先,从ContactsContract.Contacts表的PHOTO_ID列中获取照片的ID。接下来,通过您在上一步中获得的ID从ContactsContract.Data中检索PHOTO列(实际上是DATA15的别名)的字节数组。最后,使用BitmapFactory解码该字节数组以获取位图。 Here是有关此问题的文档。