亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程操作聯系人的方法(查詢,獲取,添加等)

2020-04-11 11:04:27
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程操作聯系人的方法。分享給大家供大家參考,具體如下:

Android系統中的聯系人也是通過ContentProvider來對外提供數據的,我們這里實現獲取所有聯系人、通過電話號碼獲取聯系人、添加聯系人、使用事務添加聯系人。

獲取所有聯系人

1. Android系統中的聯系人也是通過ContentProvider來對外提供數據的

2. 數據庫路徑為:/data/data/com.android.providers.contacts/database/contacts2.db

3. 我們需要關注的有3張表

raw_contacts:其中保存了聯系人id
data:和raw_contacts是多對一的關系,保存了聯系人的各項數據
mimetypes:為數據類型

4. Provider的authorites為com.android.contacts

5. 查詢raw_contacts表的路徑為:contacts

6. 查詢data表的路徑為:contacts/#/data

這個路徑為連接查詢,要查詢“mimetype”字段可以根據“mimetype_id”查詢到mimetypes表中的數據

7. 先查詢raw_contacts得到每個聯系人的id,在使用id從data表中查詢對應數據,根據mimetype分類數據

示例:

//查詢所有聯系人public void testGetAll() {  ContentResolver resolver = getContext().getContentResolver();  Uri uri = Uri.parse("content://com.android.contacts/contacts");  Cursor idCursor = resolver.query(uri, new String[] { "_id" }, null, null, null);  while (idCursor.moveToNext()) {    //獲取到raw_contacts表中的id    int id = idCursor.getInt(0);    //根據獲取到的ID查詢data表中的數據    uri = Uri.parse("content://com.android.contacts/contacts/" + id + "/data");    Cursor dataCursor = resolver.query(uri, new String[] { "data1", "mimetype" }, null, null, null);    StringBuilder sb = new StringBuilder();    sb.append("id=" + id);    //查詢聯系人表中的    while (dataCursor.moveToNext()) {      String data = dataCursor.getString(0);      String type = dataCursor.getString(1);      if ("vnd.android.cursor.item/name".equals(type))        sb.append(", name=" + data);      else if ("vnd.android.cursor.item/phone_v2".equals(type))        sb.append(", phone=" + data);      else if ("vnd.android.cursor.item/email_v2".equals(type))        sb.append(", email=" + data);    }    System.out.println(sb);  }}

通過電話號碼獲取聯系人

1. 系統內部提供了根據電話號碼獲取data表數據的功能,路徑為:data/phones/filter/*

2. 用電話號碼替換“*”部分就可以查到所需數據,獲取“display_name”可以獲取到聯系人顯示名

示例:

//根據電話號碼查詢聯系人名稱public void testGetName() {  ContentResolver resolver = getContext().getContentResolver();  Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/1111");  Cursor c = resolver.query(uri, new String[] { "display_name" }, null, null, null);  while (c.moveToNext()) {    System.out.println(c.getString(0));  }}

添加聯系人

1. 先向raw_contacts表插入id,路徑為:raw_contacts
2. 得到id之后再向data表插入數據,路徑為:data

示例:

//添加聯系人ublic void testInsert() {ContentResolver resolver = getContext().getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");ContentValues values = new ContentValues();// 向raw_contacts插入一條除了ID之外, 其他全部為NULL的記錄, ID是自動生成的long id = ContentUris.parseId(resolver.insert(uri, values));//添加聯系人姓名uri = Uri.parse("content://com.android.contacts/data");values.put("raw_contact_id", id);values.put("data2", "FHM");values.put("mimetype", "vnd.android.cursor.item/name");resolver.insert(uri, values);//添加聯系人電話values.clear(); // 清空上次的數據values.put("raw_contact_id", id);values.put("data1", "18600000000");values.put("data2", "2");values.put("mimetype", "vnd.android.cursor.item/phone_v2");resolver.insert(uri, values);//添加聯系人郵箱values.clear();values.put("raw_contact_id", id);values.put("data1", "zxx@itcast.cn");values.put("data2", "1");values.put("mimetype", "vnd.android.cursor.item/email_v2");resolver.insert(uri, values);

使用事務添加聯系人

1. 在添加聯系人得時候是分多次訪問Provider,如果在過程中出現異常,會出現數據不完整的情況,這些操作應該放在一次事務中

2. 使用ContentResolver的applyBatch(String authority,ArrayList<ContentProviderOperation> operations) 方法可以將多個操作在一個事務中執行

3. 文檔位置:

file:///F:/android-sdk-windows/docs/reference/android/provider/ContactsContract.RawContacts.html

示例:

//使用事務添加聯系人public void testInsertBatch() throws Exception {  ContentResolver resolver = getContext().getContentResolver();  ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();  ContentProviderOperation operation1 = ContentProviderOperation //      .newInsert(Uri.parse("content://com.android.contacts/raw_contacts")) //      .withValue("_id", null) //      .build();  operations.add(operation1);  ContentProviderOperation operation2 = ContentProviderOperation //      .newInsert(Uri.parse("content://com.android.contacts/data")) //      .withValueBackReference("raw_contact_id", 0) //      .withValue("data2", "ZZH") //      .withValue("mimetype", "vnd.android.cursor.item/name") //      .build();  operations.add(operation2);  ContentProviderOperation operation3 = ContentProviderOperation //      .newInsert(Uri.parse("content://com.android.contacts/data")) //      .withValueBackReference("raw_contact_id", 0) //      .withValue("data1", "18612312312") //      .withValue("data2", "2") //      .withValue("mimetype", "vnd.android.cursor.item/phone_v2") //      .build();  operations.add(operation3);  ContentProviderOperation operation4 = ContentProviderOperation //      .newInsert(Uri.parse("content://com.android.contacts/data")) //      .withValueBackReference("raw_contact_id", 0) //      .withValue("data1", "zq@itcast.cn") //      .withValue("data2", "2") //      .withValue("mimetype", "vnd.android.cursor.item/email_v2") //      .build();  operations.add(operation4);  // 在事務中對多個操作批量執行  resolver.applyBatch("com.android.contacts", operations);}

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合亚洲精品激情狠狠| 欧美人与性动交| 午夜伦理精品一区| 日本不卡免费高清视频| 亚洲丝袜av一区| 日本韩国在线不卡| 欧美夫妻性视频| 国产一区二区三区直播精品电影| 久久精品国产一区二区电影| 久久久999精品| 精品一区精品二区| www.99久久热国产日韩欧美.com| 欧美成人精品一区| 国产女同一区二区| 久久视频免费观看| 日韩精品欧美国产精品忘忧草| 亚洲国产精品va在线看黑人| 日本不卡免费高清视频| 久久综合五月天| 日韩国产欧美区| 人妖精品videosex性欧美| 亚洲精品视频网上网址在线观看| 亚洲第一视频网站| 国产亚洲精品美女久久久久| 亚洲jizzjizz日本少妇| 亚洲a级在线播放观看| 亚洲国产精品成人精品| 欧美电影在线观看高清| 久久精品国产亚洲| 国产剧情日韩欧美| 国产精品wwwwww| 亚洲成人aaa| 国产亚洲精品久久| 欧洲亚洲妇女av| 国产精品视频yy9099| 91久久久久久久久久久久久| xvideos亚洲人网站| 成人国产在线视频| 久久精品国产99国产精品澳门| 亚洲国产成人av在线| 97国产成人精品视频| 欧美一级视频在线观看| 日韩精品免费在线| 久久久久久999| 成人亚洲激情网| 欧美精品videos另类日本| 欧美中文在线视频| 欧美精品在线观看91| 日韩免费看的电影电视剧大全| 色播久久人人爽人人爽人人片视av| 欧美极品少妇与黑人| 国产美女扒开尿口久久久| 亚洲影院色在线观看免费| 久久免费成人精品视频| 亚洲人精选亚洲人成在线| 88xx成人精品| 欧美精品中文字幕一区| 欧美激情亚洲精品| 欧美老女人www| 精品综合久久久久久97| 久久久久久亚洲精品不卡| 久久精品国产亚洲7777| 97视频免费在线看| 亚洲黄色www网站| 久久久久久久久久久免费精品| 一区二区三区视频观看| 国产香蕉精品视频一区二区三区| 欧美三级免费观看| 久久精品国产免费观看| 久久国产精品首页| 久久99视频免费| 狠狠干狠狠久久| 欧美中文字幕视频在线观看| 51久久精品夜色国产麻豆| 深夜精品寂寞黄网站在线观看| 欧美性xxxxx极品| 啪一啪鲁一鲁2019在线视频| 亚洲第一网站男人都懂| 91久久精品日日躁夜夜躁国产| 九九热这里只有在线精品视| 国精产品一区一区三区有限在线| 亚洲精品国产免费| 亚洲男人天堂手机在线| 欧美精品videosex极品1| 国产日本欧美一区二区三区| 欧美激情日韩图片| 日韩经典中文字幕在线观看| 91国语精品自产拍在线观看性色| 午夜精品久久久久久久久久久久久| 2019中文在线观看| 欧美日韩一二三四五区| 国产欧美日韩中文字幕在线| 91精品国产综合久久香蕉| 欧美精品在线免费播放| 精品久久中文字幕久久av| 日韩精品一区二区三区第95| 最近免费中文字幕视频2019| 国产精品影院在线观看| 欧美丰满片xxx777| 国产欧美一区二区三区在线| 97久久久免费福利网址| 色综合久久88色综合天天看泰| 亚洲桃花岛网站| 97超碰蝌蚪网人人做人人爽| 亚洲欧洲免费视频| 超碰91人人草人人干| 欧美亚洲国产成人精品| 精品中文字幕在线| 亚洲国语精品自产拍在线观看| 欧美日韩第一页| 国产综合在线观看视频| 亚洲国产中文字幕在线观看| 久久久人成影片一区二区三区| 成人免费视频97| 欧美视频在线看| 日本一本a高清免费不卡| 日韩视频在线免费观看| 久久91亚洲精品中文字幕奶水| 成人国产精品av| 日本高清久久天堂| 日韩成人在线视频观看| 国产精品免费小视频| 亚洲精品美女久久久| 国产亚洲欧洲黄色| 日日骚久久av| 久久777国产线看观看精品| 欧美大片在线影院| 最近中文字幕mv在线一区二区三区四区| 亚洲精品国产精品国产自| 91精品国产色综合久久不卡98口| 中文在线资源观看视频网站免费不卡| 久久久精品免费视频| 欧美黑人一级爽快片淫片高清| 国产精品老女人精品视频| 精品日韩美女的视频高清| 亚洲欧洲xxxx| 国产精品一区二区久久国产| 自拍偷拍亚洲精品| 欧美在线欧美在线| 亚洲精品视频在线观看视频| 亚洲永久免费观看| 爽爽爽爽爽爽爽成人免费观看| 欧美电影《睫毛膏》| 色综合老司机第九色激情| 亚洲综合在线中文字幕| 色综合久久悠悠| 国产精品免费在线免费| 日本久久久a级免费| 91精品国产综合久久香蕉最新版| 欧美国产高跟鞋裸体秀xxxhd| 日韩禁在线播放| 国产欧美一区二区三区在线| 久久久日本电影| 国产乱人伦真实精品视频| 亚洲美女视频网站| 1769国内精品视频在线播放| 一区二区三区国产视频| 日韩精品在线观看一区二区| 国产精品免费久久久久久| 久久综合久中文字幕青草| 中文字幕久精品免费视频| 日韩精品在线免费| 美女视频黄免费的亚洲男人天堂| 久久成人这里只有精品|