我有一个自定义来电屏幕,可以当前显示来电的姓名和电话号码。如果联系人设置了个人资料图片(在您自己的手机上),则该图像应显示在我创建的 ImageView 中。任何不在手机上的号码都会显示 Android 图标。
测试代码后,无论电话号码是否存储在手机(模拟器)上,我都会得到Android图标。以下是检索来电者联系人照片的代码(如果有的话):
public Uri getPhotoUri(long contactId) { //contactId takes the phone number.
ContentResolver contentResolver = getContentResolver();
try {
Cursor cursor = contentResolver
.query(ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.Data.CONTACT_ID
+ "="
+ contactId
+ " AND "
+ ContactsContract.Data.MIMETYPE
+ "='"
+ ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
+ "'", null, null);
if (cursor != null) {
if (!cursor.moveToFirst()) {
return null; // no photo
}
} else {
return null; // error in cursor process
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
Uri person = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, contactId);
return Uri.withAppendedPath(person,
ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}
该方法调用上述方法,并将图片分配给ImageView。问题是 else 语句总是被执行:
IncomingCallListener.getId(getID))); 是用于获取相应头像的实际电话号码。
public void showContactPhoto(){
Uri u = getPhotoUri(IncomingCallListener.getId(getID()));
if (u != null) {
qcbContactPic.setImageURI(u);
Log.d("PHOTO", "ID launched");
} else {
qcbContactPic.setImageResource(R.drawable.ic_launcher);
Log.d("PHOTO", "Default launched");
}
}
有没有人知道为什么“u”仍然为空?
注意:联系人图片存储在媒体库中。