在android联系人提供商中更新联系人图像
我创建一个应用程序来读取、更新、删除联系人详细信息。 更新联系人图片时出现问题 当设备在应用程序之外添加新联系人时,没有图像。 那么我们就不能更新联系人的图片了。 我的更新代码是在android联系人提供商中更新联系人图像,android,android-contentprovider,android-contacts,Android,Android Contentprovider,Android Contacts,我创建一个应用程序来读取、更新、删除联系人详细信息。 更新联系人图片时出现问题 当设备在应用程序之外添加新联系人时,没有图像。 那么我们就不能更新联系人的图片了。 我的更新代码是 ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) .withSelection(Data.CONTACT_ID+"= ? AND "+ContactsContract.Data.MIMETYPE+"=?",n
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(Data.CONTACT_ID+"= ? AND "+ContactsContract.Data.MIMETYPE+"=?",new String[]{id,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE})
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, imageInByte)
.build());
请提供这方面的解决方案。您将使用不同的代码更新照片,然后将照片添加到没有照片的联系人。根据您上面的描述,我相信您正在尝试插入图像而不是更新图像,但以下是这两种情况的代码:
if(hasPhoto(resolver, id) == true)
{
int photoRow = -1;
String where = ContactsContract.Data.RAW_CONTACT_ID + " = " + id + " AND " + ContactsContract.Data.MIMETYPE + " =='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, where, null, null);
int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID);
if (cursor.moveToFirst()) {
photoRow = cursor.getInt(idIdx);
}
cursor.close();
// Update current photo
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(ContactsContract.Data._ID + " = ?", new String[] {Integer.toString(photoRow)})
.withValue(ContactsContract.Data.RAW_CONTACT_ID, id)
.withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.Data.DATA15, photoBytes)
.build());
try {
resolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
// Create new photo entry
int rawContactId = -1;
Cursor cursor = resolver.query(ContactsContract.RawContacts.CONTENT_URI, null, ContactsContract.RawContacts.CONTACT_ID + "=?", new String[] {id}, null);
if(cursor.moveToFirst())
{
rawContactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.RawContacts._ID));
if(rawContactId > -1)
{
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, photoBytes)
.build());
try
{
resolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
if(hasPhoto(解析器,id)==true)
{
int photoRow=-1;
字符串,其中=contacts contract.Data.RAW_CONTACT_ID+“=”+ID+”和“+contacts contract.Data.MIMETYPE+”='“+contacts contract.commondatatypes.Photo.CONTENT_ITEM_TYPE+”;
Cursor Cursor=resolver.query(ContactsContract.Data.CONTENT\u URI,null,where,null,null);
int idIdx=cursor.getColumnIndexOrThrow(ContactsContract.Data.\u ID);
if(cursor.moveToFirst()){
photoRow=cursor.getInt(idIdx);
}
cursor.close();
//更新当前照片
ArrayList ops=新的ArrayList();
添加(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT\uURI)
.withSelection(contacts contract.Data._ID+“=?”,新字符串[]{Integer.toString(photoRow)})
.带值(contacts contract.Data.RAW\u CONTACT\u ID,ID)
.带值(contacts contract.Data.IS_SUPER_PRIMARY,1)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Photo.CONTENT\u ITEM\u TYPE)
.带值(contacts contract.Data.DATA15,photoBytes)
.build());
试一试{
解析程序applyBatch(ContactsContract.AUTHORITY,ops);
}捕获(远程异常){
}捕获(操作应用程序异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
其他的
{
//创建新照片条目
int-rawContactId=-1;
Cursor Cursor=resolver.query(ContactsContract.RawContacts.CONTENT_URI,null,ContactsContract.RawContacts.CONTACT_ID+“=?”,新字符串[]{ID},null);
if(cursor.moveToFirst())
{
rawContactId=cursor.getInt(cursor.getColumnIndex(ContactsContract.RawContacts.\u ID));
如果(原始联系人ID>-1)
{
ArrayList ops=新的ArrayList();
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带值(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactid)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Photo.CONTENT\u ITEM\u TYPE)
.withValue(ContactsContract.CommonDataTypes.Photo.Photo,photoBytes)
.build());
尝试
{
解析程序applyBatch(ContactsContract.AUTHORITY,ops);
}捕获(远程异常){
}捕获(操作应用程序异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
不同之处在于,如果要更新现有照片,则使用newUpdate功能;如果要将照片插入从未有过照片的联系人,则使用newInsert