2011-06-01 133 views
1

我想使用聯繫人ID獲取聯繫人圖像。Android - 無法獲取聯繫人照片?

這裏是我的代碼: -

public Bitmap getDisplayPhoto(Long id) 
{ 
    Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI,id); 
    InputStream input = Contacts.openContactPhotoInputStream(this.getContentResolver(), uri); 
    if (input == null) 
    { 
     return null; 
    } 
    return BitmapFactory.decodeStream(input); 
} 

此代碼返回null,我所有的聯繫人包括那些具有的圖像。

我在這裏做錯了什麼?

請幫忙!!

謝謝。

+0

你能更新你的代碼嗎? – SpicyWeenie 2012-06-13 09:43:36

+0

@ChocoMan上面的代碼已經更新和工作。 :) – Varundroid 2012-06-15 15:27:32

回答

4

可在聯繫人從Facebook同步?因爲那些似乎不可訪問。

如果不是的話,你可以試試這個:

InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(this.getContentResolver(), uri); 

不知道,如果你在的地方有進口爲ContactsContract

+0

是的,我有進口'ContactsContract',是的我的聯繫人與FB同步,但不是所有人都只有兩三個,所以我想知道其他聯繫人有什麼問題? – Varundroid 2011-06-01 13:56:57

+0

我假設你擁有所有正確的權限? – Femi 2011-06-01 14:29:37

+0

是的,我有READ_CONTACTS權限。但是,我是否需要其他許可才能閱讀聯繫人的照片? – Varundroid 2011-06-01 15:19:59

2

您可以使用下面的代碼來加載聯繫人的照片。

Cursor c = getContentResolver().query(People.CONTENT_URI, new String[] { People._ID, People.NAME }, null, null, null); 

    int idCol = c.getColumnIndex(People._ID); 
    long id = c.getLong(idCol); 
    Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, id); 
    Bitmap bitmap = People.loadContactPhoto(context, uri, R.drawable.icon, null); 

否則 你可以看到下面的網址

http://thinkandroid.wordpress.com/2010/01/19/retrieving-contact-information-name-number-and-profile-picture/

感謝 迪帕克

+0

我認爲人們現在已棄用。其他解決方案? – Varundroid 2011-06-01 13:53:46

0

您可以使用此代碼在Android聯繫人數據庫表中獲取照片: 首先獲取聯繫人ID。

long _id = Long.parseLong(id); 
    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, _id); 
    InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri); 

    if(input!=null){ 
     flag=true; 
     Bitmap bitmap=BitmapFactory.decodeStream(input);  

     ImageView image=(ImageView)findViewById(R.id.imageView1); 
     image.setImageBitmap(bitmap); 
    }