以下是我用来编写联系人PHOTO的代码。有用。如果我把它写到地址簿后又快又快又回去阅读联系方式,我会把照片还给我。
但是,在10秒左右之后,在调试器中你可以看到一个警报触发和一个线程启动,如果我再次读取相同的联系人就会消失,PHOTO从大约400x400缩小到96x96。
看起来后端有一个触发器触发,在写入后缩放PHOTO。有没有人知道绕过这个或控制它的方法?或者是否有更好的方法来编写不会导致缩放触发的PHOTO?
我在Droid的Android 2.1中这样做。
在试图确定我是否正确地写了PHOTO时,我看到有一个 ContactsContract.ContactsColumns接口与PHOTO_URI和PHOTO_THUMB_URI成员,但我找不到任何方法来获取它,因为接口受到保护,我找不到任何返回它们的连接。有人如何使用它们?
Uri uri = ContactsContract.RawContacts.CONTENT_URI;
String[] projection = new String[] { BaseColumns._ID };
String selection = ContactsContract.RawContacts.CONTACT_ID + "=?";
String[] arguments = new String[] { "" + lContactID };
Cursor cursor = resolver.query(uri, projection, selection, arguments, null);
if (cursor != null && cursor.getCount() > 0)
{
while (cursor.moveToNext())
{
long rawContactId = cursor.getLong(0);
int row = -1;
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Data._ID };
String selection = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
String[] params = new String[] { "" + rawContactId };
Cursor cursor = resolver.query(uri, projection, selection, params, null);
if (cursor != null && cursor.getCount() > 0)
{
if (cursor.moveToFirst())
{
row = cursor.getInt(0);
}
cursor.close();
}
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, pic);
values.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
if (row >= 0)
{
resolver.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null);
}
else
{
resolver.insert(ContactsContract.Data.CONTENT_URI, values);
}
}
cursor.close();
cursor = null;
}
答案 0 :(得分:1)
事实证明,正是缩放照片的gmail.com同步适配器。
如果我关闭
设置 - >帐户& Syncs-> gmail.com->“同步通讯录”问题消失了。
为什么同步适配器需要在未放置的PHOTO上执行此操作?
如果这还不够,那与它的表现甚至不一致:
如果gmail.com联系人以前没有在服务器上有图片,当我将PHOTO写入地址簿时,它不会缩放。图片显示在服务器上。
但是,如果gmail.com联系人之前在服务器上有一张图片,当我将联系人写入地址簿时,我刚写的图片缩放为96x96。再一次,图片显示在服务器上。
因此,同步适配器有处理原始图片的错误,或者有更新图片的错误,因为它并不总是缩放照片。无论哪种方式,它都不应该缩放图片:(