Contacts Provider基础
? ? ? 作為四大組件之一的ContentProvider工作中我們很少會用到自己自定義的ContentProvider,用到的最多的就是系統提供的。官方文檔提供了兩種系統ContentProvider,一種是CalendarProvider,一種是Contacts Provider。今天我們的主角就是Contact Provider。
? ? ?The Contacts Provider is?an Android content provider component. It maintains three types of data about a person
? ??這句話源于官網,大概意思就是Contacts Provider是安卓內容提供者組件,它維護著關于用戶的三種數據類型。
? ?這三種數據類型指向三種表:ContactsContract.Contacts、ContactsContract.RawContacts、ContactsContract.Data
??
? 下面我們就分別看一下三個表的表結構:
? ?Contacts:由下面的表結構我們可以發現,該表主要維護著_id和raw_contact_id這兩個字段。
?? ?RawContacts:?containing a summary of a person's data, specific to a user account and type.(包含著用戶信息的摘要以及一個用戶的賬戶和類型的詳情)
? ?
? Data:containing the details for raw contact(包含raw contact表的詳情)
? 通過上面的圖文并茂,我們已經初略的了解了三個表的結構以及作用,下面我們就來分別了解一下三個表的應用:
? 仔細觀察我截取的圖片,不難發現一個數字在三個表都有出現,那就是“25”;在Contacts表中,我們可以發現_id和raw_contact_id是一樣的,沒錯,這不是偶然的,如果你多添加幾條聯系人就會相信這個結果的。那么這個id又有什么用呢?又是如何產生的呢?
? 首先我們來看它是如何產生的:
? ? ?當我們想增加一條新的聯系人的時候,首先我們必須先在RawContacts這個表中插入一條數據,然后系統就會給我們返回一個URi,此Uri里面就包含該ID。代碼如下:? ? ?
ContentValues values = new ContentValues();Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);long rawContactId = ContentUris.parseId(rawContactUri);
? ? 有了這個ID,我們就可以盡情的插入我們的數據啦:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?增加聯系人
? ? 第一步:插入聯系人名稱:
? ? ??
contentValues.clear();contentValues.put(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.CommonDataKinds.StructuredName.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "王五");contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? 第二步:插入手機號:( ContactsContract.CommonDataKinds.Phone)? ? ? ?
contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "13688888888");contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? ? 第三步:插入郵箱地址:( ContactsContract.CommonDataKinds.Email)? ??
contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Email.ADDRESS, "********@hotmail.com");contentValues.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME);contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? 第四步:插入網址: (ContactsContract.CommonDataKinds.Website)? ? ?
contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Website.URL, "www.taolv365.com");contentValues.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_WORK);contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? 第五步:插入地址 (ContactsContract.CommonDataKinds.StructuredPostal) contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, "上步路");contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, "008512");contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ?第六步:插入昵稱 (ContactsContract.CommonDataKinds.Nickname)? ? ?
contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Nickname.NAME, "娃哈哈");contentValues.put(ContactsContract.CommonDataKinds.Nickname.TYPE, ContactsContract.CommonDataKinds.Nickname.TYPE_SHORT_NAME);contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? ? 第七步:插入備注 (ContactsContract.CommonDataKinds.Note)? ? ??
contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Note.NOTE, "備注成功");contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? 第八步:插入即時消息 (ContactsContract.CommonDataKinds.Im)? ? ?
contentValues.clear();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, "即時消息");contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE, ContactsContract.CommonDataKinds.Im.TYPE_HOME);contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);? ? ?插入的數據都是保存在Data表里面的,所以 URI為:ContactsContract.Data.CONTENT_URI 。? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除聯系人
??
contentResolver.delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts.CONTACT_ID+"=?",new String[]{"26"});contentResolver.delete(ContactsContract.Data.CONTENT_URI, ContactsContract.Data.CONTACT_ID+"=?",new String[]{"26"});Toast.makeText(MainActivity.this,"刪除成功",Toast.LENGTH_LONG).show();? ? ? 注意:刪除數據的時候要同時刪除RawContacts和Data表里面的數據
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??修改聯系人信息
? ??
contentValues=new ContentValues();contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, 27);contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "13699999999");contentResolver.insert(ContactsContract.Data.CONTENT_URI, contentValues);contentResolver.update(ContactsContract.Data.CONTENT_URI, contentValues, ContactsContract.Data.CONTACT_ID + "=?", new String[]{"27"});Toast.makeText(MainActivity.this,"修改成功",Toast.LENGTH_LONG).show();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??查詢聯系人信息
? ? ? ?
<span style="color:#333333;"> cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME},null,null,null);while (cursor.moveToNext()){String id=cursor.getString(cursor.getColumnIndex(ContactsContract.Data._ID));Cursor cursor_phone=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, ContactsContract.Data.RAW_CONTACT_ID+"=?",new String[]{id},null);if (cursor_phone !=null){while (cursor_phone.moveToNext()){String name=cursor_phone.getString(cursor_phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String number=cursor_phone.getString(cursor_phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));textView_show.append("_Name:"+name+"Number:"+number+"\n");}}}</span>? ? ? ? ? ? ?另外,所有表的列名都可以在ContactsContract.DataColumns這個接口的實現類里面找到。
總結
以上是生活随笔為你收集整理的Contacts Provider基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 针式打印机套打+lodop
- 下一篇: 打印机打印字体轻,像针式的故障处理(图)