手机自带联系人二维码携带的信息是vcard信息。一般的二维码扫描后会自动识别为联系人信息,跳转名片添加页面。
以下是直接通过代码添加联系人:
- public boolean insert(String given_name, String mobile_number,
- String work_email, String im_qq) {
- try {
- ContentValues values = new ContentValues();
- // 下面的操作会根据RawContacts表中已有的rawContactId使用情况自动生成新联系人的rawContactId
- Uri rawContactUri = getContentResolver().insert(
- RawContacts.CONTENT_URI, values);
- long rawContactId = ContentUris.parseId(rawContactUri);
- // 向data表插入姓名数据
- if (given_name != "") {
- values.clear();
- values.put(Data.RAW_CONTACT_ID, rawContactId);
- values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
- values.put(StructuredName.GIVEN_NAME, given_name);
- getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
- values);
- }
- // 向data表插入电话数据
- if (mobile_number != "") {
- values.clear();
- values.put(Data.RAW_CONTACT_ID, rawContactId);
- values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
- values.put(Phone.NUMBER, mobile_number);
- values.put(Phone.TYPE, Phone.TYPE_MOBILE);
- getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
- values);
- }
- // 向data表插入Email数据
- if (work_email != "") {
- values.clear();
- values.put(Data.RAW_CONTACT_ID, rawContactId);
- values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
- values.put(Email.DATA, work_email);
- values.put(Email.TYPE, Email.TYPE_WORK);
- getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
- values);
- }
- // 向data表插入QQ数据
- if (im_qq != "") {
- values.clear();
- values.put(Data.RAW_CONTACT_ID, rawContactId);
- values.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
- values.put(Im.DATA, im_qq);
- values.put(Im.PROTOCOL, Im.PROTOCOL_QQ);
- getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
- values);
- }
- // 向data表插入头像数据
- Bitmap sourceBitmap = BitmapFactory.decodeResource(getResources(),
- R.drawable.icon);
- final ByteArrayOutputStream os = new ByteArrayOutputStream();
- // 将Bitmap压缩成PNG编码,质量为100%存储
- sourceBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
- byte[] avatar = os.toByteArray();
- values.put(Data.RAW_CONTACT_ID, rawContactId);
- values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
- values.put(Photo.PHOTO, avatar);
- getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
- values);
- }
- catch (Exception e) {
- return false;
- }
- return true;
- }
- 下面是读取联系人的代码:
-
Cursor cursor = Main2Activity.this.getContentResolver().query(ContactsContract.Contacts .CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { int contactIdIndex = 0; int nameIndex = 0; contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID); nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); String contactId = cursor.getString(contactIdIndex); String name = cursor.getString(nameIndex); if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(contactId)) { Cursor phoneCursor = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null); boolean flag=true; while(phoneCursor.moveToNext()&&flag){ String string = phoneCursor.getString(phoneCursor.getColumnIndex (ContactsContract.CommonDataKinds.Phone.NUMBER)); if(!TextUtils.isEmpty(name)&&!TextUtils.isEmpty(string)){ listName.add(name); listTel.add(string); flag=false; } } } }
这里我只是读取的一个电话号码,因为一个姓名可能对应多个号码