Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android设置联系人照片质量好,无像素化_Java_Android_Image_Photo_Contactscontract - Fatal编程技术网

Java Android设置联系人照片质量好,无像素化

Java Android设置联系人照片质量好,无像素化,java,android,image,photo,contactscontract,Java,Android,Image,Photo,Contactscontract,我正在开发一个应用程序,为社交网络中的联系人提供和设置图片,我已经知道如何将图片设置为联系人,但当我以编程方式设置时,图片的存储质量较低。 例如,这里有两个示例,第一个图片是用my app设置的,第二个是用native android contacts app设置的(两种情况下的源图片完全相同): 第一个例子 使用我的应用程序: 使用本机应用程序: 第二个例子 使用我的应用程序: 使用本机应用程序: 你可以在手和其他部位看到像素化 我用来设置联系人图片的代码: public static

我正在开发一个应用程序,为社交网络中的联系人提供和设置图片,我已经知道如何将图片设置为联系人,但当我以编程方式设置时,图片的存储质量较低。 例如,这里有两个示例,第一个图片是用my app设置的,第二个是用native android contacts app设置的(两种情况下的源图片完全相同):

第一个例子 使用我的应用程序:

使用本机应用程序:

第二个例子 使用我的应用程序:

使用本机应用程序:

你可以在手和其他部位看到像素化

我用来设置联系人图片的代码:

public static boolean setContactPhoto(long contactId, byte[] photo) {
    ContentResolver cr = context.getContentResolver();
    ContentValues values = new ContentValues();
    long photoId = -1;
    long rawContactId = -1;
    Cursor rawContactsCursor = cr.query(
            ContactsContract.RawContacts.CONTENT_URI,
            new String[]{ContactsContract.RawContacts._ID},
            String.format("%s=%d", ContactsContract.RawContacts.CONTACT_ID, contactId),
            null,
            null
    );
    while (rawContactsCursor.moveToNext()) {
        rawContactId = rawContactsCursor.getLong(rawContactsCursor.getColumnIndex(ContactsContract.RawContacts._ID));
        String where = String.format(
                "%s=%d AND %s=='%s'",
                ContactsContract.Data.RAW_CONTACT_ID,
                rawContactId,
                ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
        );
        Cursor dataCursor = cr.query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data._ID},
                where,
                null,
                null
        );
        if (dataCursor.moveToFirst()) {
            photoId = dataCursor.getLong(dataCursor.getColumnIndex(ContactsContract.Data._ID));
            dataCursor.close();
            break;
        }
        dataCursor.close();
    }
    rawContactsCursor.close();

    if (rawContactId < 0) return false;

    values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
    values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
    values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);

    if (photoId < 0) {
        return cr.insert(ContactsContract.Data.CONTENT_URI, values) != null;
    } else {
        return cr.update(ContactsContract.Data.CONTENT_URI, values, String.format("%s=%d", ContactsContract.Data._ID, photoId), null) == 1;
    }
}
public静态布尔setContactPhoto(长contactId,字节[]photo){
ContentResolver cr=context.getContentResolver();
ContentValues=新的ContentValues();
长photoId=-1;
长rawContactId=-1;
游标rawContactsCursor=cr.query(
Contacts contract.raw contacts.CONTENT\u URI,
新字符串[]{ContactsContract.RawContacts.\u ID},
String.format(“%s=%d”,contacts contract.raw contacts.CONTACT\u ID,contactId),
无效的
无效的
);
while(rawContactsCursor.moveToNext()){
rawContactId=rawContactsCursor.getLong(rawContactsCursor.getColumnIndex(ContactsContract.RawContacts.u ID));
字符串,其中=String.format(
%s=%d和%s=='%s',
Contacts contract.Data.RAW\u CONTACT\u ID,
罗维德,
Contacts contract.Data.MIMETYPE,
Contacts contract.CommonDataTypes.Photo.CONTENT\u ITEM\u TYPE
);
游标数据游标=cr.query(
contacts contract.Data.CONTENT\u URI,
新字符串[]{contacts contract.Data.\u ID},
哪里
无效的
无效的
);
if(dataCursor.moveToFirst()){
photoId=dataCursor.getLong(dataCursor.getColumnIndex(ContactsContract.Data.\u ID));
dataCursor.close();
打破
}
dataCursor.close();
}
rawContactsCursor.close();
if(rawContactId<0)返回false;
值.put(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactid);
value.put(contacts contract.Data.IS_SUPER_PRIMARY,1);
value.put(contacts contract.commondatatypes.Photo.Photo,Photo);
value.put(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Photo.CONTENT\u ITEM\u TYPE);
if(photoId<0){
返回cr.insert(ContactsContract.Data.CONTENT\u URI,值)!=null;
}否则{
返回cr.update(ContactsContract.Data.CONTENT\u URI,值,String.format(“%s=%d”,ContactsContract.Data.\u ID,photoId),null)==1;
}
}
我的手机有540x960的分辨率,所以源图片是960x960,这很奇怪,但如果我尝试设置540x960图片,它会从四面八方裁剪并放大,所以像素化更大

那么,如何避免以编程方式设置联系人图片的像素化?

如中所述,.photo字段保存“原始联系人的缩略图”

我认为您必须将照片文件ID设置为“通过照片文件ID访问全尺寸照片”


请参阅相关的

我是否正确,我必须将位图数据写入临时目录并设置照片文件ID,然后删除临时位图文件?你能给我一些代码片段吗?我们看不到图像。。。。