2017-06-19 25 views
1

我正在使用下面的代碼來訪問電話號碼和聯繫人的姓名。我想添加到這個功能的方式來添加聯繫人的照片。我想檢索我的聯繫人的聯繫人照片。我如何去做呢?

void loadContacts() { 
    ContentResolver contentResolver=getContentResolver(); 
    Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null); 
    if(cursor.getCount() > 0) { 
     while (cursor.moveToNext()) {String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); 
      if (hasPhoneNumber > 0) { 
       Cursor cursor2 = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); 
       while (cursor2.moveToNext()) { 
        String phoneNumber = cursor2.getString(cursor2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        make_contact(name,phoneNumber); 
       } 
       cursor2.close(); 
      } 
     } 
    } 
    cursor.close(); 
} 
+0

按照此鏈接https://gist.github.com/evandrix/7058235 –

回答

1

對於位圖圖像,

private Bitmap retrieveContactPhoto(String contactID) { 

      Bitmap photo = null; 

      try { 
       InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), 
         ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(contactID))); 

       if (inputStream != null) { 
        photo = BitmapFactory.decodeStream(inputStream); 
       } 

       assert inputStream != null; 
       inputStream.close(); 

       return photo ; 

      } catch (IOException e) { 
       e.printStackTrace(); 
       return null; 
      } 

     } 

通過使用聯繫人ID,您可以檢索位圖圖像並設置爲imageview。

+0

使用此Long.valueOf(contactID),而不是這個新的長(contactID)。 – RameshJaga

+0

此代碼在關閉inputStream.close()時創建NullPointerException;在關閉IOstream之前進行空檢查。 – RameshJaga

+0

您的代碼讀取聯繫人圖片並正常工作。 – RameshJaga

0

試試這個

public Uri getPhotoUri() { 
try { 
    Cursor cur = this.ctx.getContentResolver().query(
      ContactsContract.Data.CONTENT_URI, 
      null, 
      ContactsContract.Data.CONTACT_ID + "=" + this.getId() + " AND " 
        + ContactsContract.Data.MIMETYPE + "='" 
        + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, 
      null); 
    if (cur != null) { 
     if (!cur.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, Long 
     .parseLong(getId())); 
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 

}

現在設置圖像

Uri u = objItem.getPhotoUri(); 
if (u != null) { 
    mPhotoView.setImageURI(u); 
} else { 
    mPhotoView.setImageResource(R.drawable.ic_contact_picture_2); 
} 
相關問題