Android联系人头像存储有关问题
Android联系人头像存储问题
求大神指点:
当本机有头像时,可以存储成功,也就是第一个方法;但是,当本机无头像时,却存储不成功,虽然不报错,但是没有存储进去。
------解决思路----------------------
联系人中一般只保存这个10个字段,你把代码拿去,建一个Card实体类
再加入权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
如果还不行,我就真的帮不了你了
求大神指点:
当本机有头像时,可以存储成功,也就是第一个方法;但是,当本机无头像时,却存储不成功,虽然不报错,但是没有存储进去。
private void updateOrInsertPhoto(Long rawContactId, byte[] photo) {
if (contact.getIcon() != null) {
ContentValues values = new ContentValues();
values.put(Photo.PHOTO, photo);
String selection = Data.RAW_CONTACT_ID + "=? and " + Data.MIMETYPE
+ "=?";
String[] selectionArgs = new String[] {
Long.toString(rawContactId), Photo.CONTENT_ITEM_TYPE };
getContentResolver().update(Data.CONTENT_URI, values, selection,
selectionArgs);
} else {
ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
values.put(Photo.PHOTO, photo);
getContentResolver().insert(Data.CONTENT_URI, values);
}
}
------解决思路----------------------
public static final String[] VCARD_PROP = new String[] { "name", "position", "company", "mobile", "phone", "fax", "email", "address", "url" };
/**
* 增加联系人, 姓名不能为空
*
* @param card
* @return long
* @throws Exception
*/
public long write(Card card, Context context) throws Exception {
if (null == card
------解决思路----------------------
tool.isBlank(card.getName())) {
return 0;
}
ContentResolver resolver = context.getContentResolver();
ContentValues values = new ContentValues();
// 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
Uri uri = resolver.insert(RawContacts.CONTENT_URI, values);
long id = ContentUris.parseId(uri);
values.clear();// 往data表入姓名数据
values.put(Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, card.getName());
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 添加用户名 职位 部门
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
values.put(Organization.LABEL, card.getLabel());
values.put(Organization.TITLE, card.getPosition());
values.put(Organization.COMPANY, card.getCompany());
values.put(Organization.TYPE, Organization.TYPE_WORK);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 添加邮箱
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.DATA, card.getEmail());
values.put(Email.TYPE, Email.TYPE_WORK);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 添加手机
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, card.getMobile());
values.put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 添加固定电话
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, card.getPhone());
values.put(Phone.TYPE, Phone.TYPE_WORK);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 添加传真
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, card.getFax());
values.put(Phone.TYPE, Phone.TYPE_FAX_WORK);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 添加地址 邮编
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
values.put(StructuredPostal.FORMATTED_ADDRESS, card.getAddress());
values.put(StructuredPostal.POSTCODE, card.getPost());
values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();// 个人网站
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
values.put(Website.DATA, card.getUrl());
values.put(Website.TYPE, Website.TYPE_WORK);
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
if (null != card.getBitmap()) {
values.clear();// 添加头像
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
ByteArrayOutputStream array = new ByteArrayOutputStream();
card.getBitmap().compress(Bitmap.CompressFormat.JPEG, 100, array);
values.put(Photo.PHOTO, array.toByteArray());
resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
}
return id;
}
联系人中一般只保存这个10个字段,你把代码拿去,建一个Card实体类
再加入权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
如果还不行,我就真的帮不了你了