常量为Android高清联系人照片大小

时间:2013-07-08 11:30:07

标签: android constants contacts photo

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

  1. 我仍然找不到大的那个,而小的是数据库中的“data15”,有人请告诉我如何获得大的?
  2. 我需要将照片放在发射器的第一个屏幕上,所以我需要一张至少800 * 480的照片,必须声明照片尺寸不变....
  3. PS:我试过了:

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

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

    好人一声平安(那是中国好男孩,祝你好运) 谢谢^ _ ^

2 个答案:

答案 0 :(得分:0)

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

您是否尝试过提取用户ID并使用该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应提供易于阅读的这些操作示例:)

答案 1 :(得分:0)

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

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;
    }
}