关于系统联系人数据库的操作一
作为Android系统的联系人库,自然有其本地的存储路径,默认的存储在/data/data/com.android.providers.contacts/databases 里面有几个.db文件,其中有contact文件,某些手机厂商可能会定制不同的数据库表,这时候需要我们逐个去用SQLite去操作一下。
其中的字段主要在data表,MIME在这里面也有相关的映射。
应用,批量增加联系人。
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); long contactid = ContentUris.parseId(resolver.insert(uri, values)); uri = Uri.parse("content://com.android.contacts/data"); // 添加姓名 values.put("raw_contact_id", contactid); values.put("mimetype", "vnd.android.cursor.item/name"); values.put("data2", "王超" + num); resolver.insert(uri, values); // 添加电话 values.put("raw_contact_id", contactid); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); values.put("data2", "2"); values.put("data1", "13888888888"); resolver.insert(uri, values); // 添加电话 values.put("raw_contact_id", contactid); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); values.put("data2", "3"); values.put("data1", "13777777777"); resolver.insert(uri, values);
使用contentValue来储存,使用contentResolver来插入。注意和数据库中的字段一一对应。一个联系人最多可以存储16条电话
上面这种是通过数据库来直接进行操作的。
对数据库表的MIME的结构如下,
vnd.android.cursor.item/email_v2
vnd.android.cursor.item/im
vnd.android.cursor.item/postal-address_v2
vnd.android.cursor.item/photo
vnd.android.cursor.item/phone_v2
vnd.android.cursor.item/name
vnd.android.cursor.item/organization
vnd.android.cursor.item/nickname
vnd.android.cursor.item/group_membership
一般在插入的时候用的比较多。
下面这种是通过Intent来插入的,需要点击保存按钮,有着很大的局限性?
void toContacts() { Intent it = new Intent(Intent.ACTION_INSERT, Uri.withAppendedPath( Uri.parse("content://com.android.contacts"), "contacts")); it.setType("vnd.android.cursor.dir/person"); // it.setType("vnd.android.cursor.dir/contact"); // it.setType("vnd.android.cursor.dir/raw_contact"); // 联系人姓名 it.putExtra(android.provider.ContactsContract.Intents.Insert.NAME, "张三"); // // 公司 // it.putExtra(android.provider.ContactsContract.Intents.Insert.COMPANY, // "北京XXXXXX公司"); // // email // it.putExtra(android.provider.ContactsContract.Intents.Insert.EMAIL, // "123456@qq.com"); // 手机号码 it.putExtra(android.provider.ContactsContract.Intents.Insert.PHONE, "010-1234567"); // // 单位电话 it.putExtra( android.provider.ContactsContract.Intents.Insert.SECONDARY_PHONE, "18600001111"); // // 住宅电话 // it.putExtra( // android.provider.ContactsContract.Intents.Insert.TERTIARY_PHONE, // "010-7654321"); // // 备注信息 // it.putExtra(android.provider.ContactsContract.Intents.Insert.JOB_TITLE, // "名片"); startActivity(it); }
基本不怎么用。
另外注意权限的使用,
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />