0

我知道android数据库保存两种联系人照片,[[[照片最多可以存储两种方式-默认的“照片”是直接存储在数据行中的缩略图大小的图像,而“显示照片”,如果存在,是存储为文件的较大版本。]]] 小的是 96*96 大的是 480 *480 现在问题:

  1. 我仍然找不到大的,而小的在数据库中是“data15”,请教我如何获得大的?
  2. 我需要将照片放在启动器的第一个屏幕上,所以我需要一张至少 800*480 的照片,照片尺寸必须声明为常数....

PS:我试过了:

intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);

但是当我打开数据库时,它变成了 96*57 ....confused....一些帮助改变了它?

好人平安一声谢谢^_^

4

2 回答 2

0

我不太清楚您将照片存储两次是什么意思?是的,很多设备都会生成缩略图,但这更多是因为显示缩略图是一种常规用例。

您是否尝试过获取用户 ID 并使用它来查询联系人数据表?

这可能是一个冗长的方法,但是,(伪代码)

Fetch contact id using the URI RawContacts.CONTENT_URI
Fetch Photo id using the URI Contacts.CONTENT_URI
Fetch Photo using the URI Data.CONTENT_URI, the projection you want here is Photo.PHOTO (this will give you a blob)

Google 应该提供这些操作的易读示例 :)

于 2013-07-08T11:40:40.747 回答
0

要获得更大的图像,您可以使用以下代码(前提是您有联系 ID):

public static InputStream getLargeContactPhoto(Long contactId, Context context) {
    Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
    Uri displayPhotoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
    try {
        AssetFileDescriptor fd = context.getContentResolver().openAssetFileDescriptor(displayPhotoUri, "r");
        return fd.createInputStream();
    } catch (Exception e) {
        return null;
    }
}
于 2013-10-29T18:19:14.840 回答