我目前正在传递联系人姓名和号码。哪个工作正常。然而,我无法找到如何传递联系人照片并将其分配给活动中的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"));
}
答案 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);
}
希望这会对你有所帮助