我有一個自定義的來電屏幕,可以顯示來電的名稱和電話號碼。如果聯繫人設置了配置文件(在您自己的手機上),該圖像應顯示在我創建的ImageView中。任何不在手機上的號碼都會顯示Android圖標。爲什麼我無法從聯繫人號碼獲取個人資料照片的URI?
測試完代碼後,無論電話號碼是否存儲在手機(模擬器)中,我都會看到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」是空的?
注意:聯繫人圖片存儲在媒體庫中。
您是否已將圖像添加到Emulator中的聯繫人中? – 2012-04-29 11:22:16
@blackcrow是與圖像 – SpicyWeenie 2012-04-29 11:24:44
什麼是您的目標SDK級別? ICS還是薑餅?在ICS(lvl 14)中,你有'PHOTO_FILE_ID',可以用來找到高分辨率的圖像,否則你幾乎堅持存儲在'PHOTO'中的縮略圖。 – Jens 2012-04-29 11:28:07