gpt4 book ai didi

android - 按 photo_ID 显示联系人的照片

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:33 29 4
gpt4 key购买 nike

我让用户在我的应用程序中选择一个联系人,并将其显示在主屏幕小部件上,但没有显示照片,我不知道出了什么问题。

这就是我获取照片引用的方式:

...
Cursor c = null;
try {
c = getContentResolver().query(uri, new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.PHOTO_ID },
null, null, null);

if (c != null && c.moveToFirst()) {
String number = c.getString(0);
int type = c.getInt(1);
String name = c.getString(2);
int photo = c.getInt(3);
showSelectedNumber(type, number, name, photo);
}
}

我是这样显示的:

public void showSelectedNumber(int type, String number, String name, int photo) {
mAppWidgetPrefix.setText(name);
pickedNumber.setText(number);
pickedPhoto.setImageResource(photo);
}

为什么它不起作用?

最佳答案

您正在尝试将 ContactsContract.Data 表中行的 ID 作为资源 ID 设置到您的 ImageView 中。这肯定行不通。它甚至没有任何意义。

您应该先从数据库中检索原始照片,然后才能显示它。

例如,您可以使用此代码在指向图像数据的行 ID 的帮助下检索图像位图(我重新创建了一些代码只是为了测试它):

private void queryContactInfo(int rawContactId) {
Cursor c = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.PHOTO_ID
}, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[] { Integer.toString(rawContactId) }, null);
if (c != null) {
if (c.moveToFirst()) {
String number = c.getString(0);
int type = c.getInt(1);
String name = c.getString(2);
int photoId = c.getInt(3);
Bitmap bitmap = queryContactImage(photoId);
showSelectedNumber(type, number, name, bitmap);
}
c.close();
}
}

private Bitmap 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();
}

if (imageBytes != null) {
return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
} else {
return null;
}
}

public void showSelectedNumber(int type, String number, String name, Bitmap bitmap) {
mInfoView.setText(type + " " + number + " " + name);
mImageView.setImageBitmap(bitmap); // null-safe
}

您还可以看到http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html作为获取联系人照片的方便提供者目录。还有一个例子。

关于android - 按 photo_ID 显示联系人的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025290/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com