如何在我的电话听众中收到联系人照片并将其传递给我的活动?

时间:2014-03-11 08:43:13

标签: android contactscontract

我目前正在传递联系人姓名和号码。哪个工作正常。然而,我无法找到如何传递联系人照片并将其分配给活动中的ImageView。

我在这里搜索过,根本没有找到一个简单的答案。

如果有必要,我的方法是获取姓名和任何人的号码:

private String getContactName(String number) {

    String name = null;

    String[] projection = new String[]{
            ContactsContract.PhoneLookup.DISPLAY_NAME,
            ContactsContract.PhoneLookup._ID};


    Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

    Cursor cursor = this.c.getContentResolver().query(contactUri, projection, null, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
        }
        cursor.close();
    }

    return name;
}

它传递给我的活动:

Bundle bundle = new Bundle();
            bundle.putString("Number", number);
            bundle.putString("Name", this.getContactName(number));
            intent.putExtras(bundle);

收到

Bundle bundle = this.getIntent().getExtras();
        if (bundle.getString("Name").isEmpty()) {
            this.name.setText("Unknown Caller");
        } else {
            this.name.setText(bundle.getString("Name"));
        }

        if (bundle.getString("Number").isEmpty()) {
            this.number.setText(bundle.getString("Number"));
        } else {
            this.number.setText(bundle.getString("Name"));
        }

2 个答案:

答案 0 :(得分:0)

哦,你可以从这个光标或你的代码中获取contactID现在这是我的方法,它会给你联系照片,只是在其中传递联系人ID

 public InputStream openPhoto(long contactId) {
     Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
     Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
     Cursor cursor = getContentResolver().query(photoUri,
          new String[] {Contacts.Photo.PHOTO}, null, null, null);
     if (cursor == null) {
         return null;
     }
     try {
         if (cursor.moveToFirst()) {
             byte[] data = cursor.getBlob(0);
             if (data != null) {
                 return new ByteArrayInputStream(data);
             }
         }
     } finally {
         cursor.close();
     }
     return null;
 }

希望这会对你有所帮助 祝你好运老兄

答案 1 :(得分:0)

试试这个你会得到联系人照片的byte []传递给意图并在第二个活动中解码

 private byte[] queryContactImage(int imageDataRow) {
    Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] {
        ContactsContract.CommonDataKinds.Photo.PHOTO
    }, ContactsContract.Data._ID + "=?", new String[] {
        Integer.toString(imageDataRow)
    }, null);
    byte[] imageBytes = null;
    if (c != null) {
        if (c.moveToFirst()) {
            imageBytes = c.getBlob(0);
        }
        c.close();
    }
    return imageBytes;
}

和第二项活动

if (imagebyte != null) {
        Bitmap bitimg2 = BitmapFactory.decodeByteArray(imagebyte, 0, imagebyte.length); 
        yourimageview.setImageBitmap(bitimg2);
    }

希望这会对你有所帮助