我在收到联系人照片时遇到问题,您在短信应用中看到的那种和新的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很好(通过搜索查询人员的号码来检查)但是却找不到联系人照片。我知道有一张照片,因为我正在对自己进行测试,以确保我有一张联系人照片,所以我不知道还应该做些什么。
我总是觉得导航联系提供商非常麻烦,因为它有很多东西。
答案 0 :(得分:1)
我知道了,我使用RAW_CONTACT_ID
对MIMETYPE
进行了查询,并向我提供了我正在寻找的照片
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是有关此问题的文档。