2012-04-29 48 views
0

我有一個自定義的來電屏幕,可以顯示來電的名稱和電話號碼。如果聯繫人設置了配置文件(在您自己的手機上),該圖像應顯示在我創建的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」是空的?

注意:聯繫人圖片存儲在媒體庫中。

+0

您是否已將圖像添加到Emulator中的聯繫人中? – 2012-04-29 11:22:16

+0

@blackcrow是與圖像 – SpicyWeenie 2012-04-29 11:24:44

+0

什麼是您的目標SDK級別? ICS還是薑餅?在ICS(lvl 14)中,你有'PHOTO_FILE_ID',可以用來找到高分辨率的圖像,否則你幾乎堅持存儲在'PHOTO'中的縮略圖。 – Jens 2012-04-29 11:28:07

回答

0

嘗試的ImageView的這個

Uri uri = ContentUris.withAppendedId(
        ContactsContract.Contacts.CONTENT_URI, longId); 
      ContentResolver cr = getContentResolver(); 
      InputStream input = ContactsContract.Contacts 
        .openContactPhotoInputStream(cr, uri); 
      if (input == null) { 
       return null; 
      } else 
       return BitmapFactory.decodeStream(input); 

使用setImageBitmap()方法。

+0

它編譯沒有錯誤,但沒有顯示任何內容 – SpicyWeenie 2012-04-29 11:38:38

+0

我可以向你保證,這是工作代碼。嘗試找出問題出在哪裏。 – 2012-04-29 11:40:29

+0

這是假設設置圖像:qcbContactPic.setImageBitmap(getShowCPhoto(IncomingCallListener.getId(getID()))); – SpicyWeenie 2012-04-29 11:44:31

相關問題