這一篇記錄下安卓的組件之一ContentProvider,這個組件的主要做用有兩個,一個是經過該組件訪問其餘應用暴露出來的數據,另外一個做用就是將本身應用中的數據選擇性的暴露給其餘的應用。下面就講解一下該組件的一些基本概念,以及基本的使用方式。android
ContentProvider 簡單使用sql
Query
下面講解一下如何提取系統提供的一些數據,最經常使用的就是獲取系統中的聯繫人信息。
須要注意的一點是,讀取聯繫人信息,須要添加權限:<uses-permission android:name="android.permission.READ_CONTACTS"/>
數據庫
private void getContacts(){ ContentResolver resolver = getContentResolver(); Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; Cursor cursor = resolver.query(uri, null, null, null, null); assert cursor != null; while(cursor.moveToNext()) { String cName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String cNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.d(TAG,"姓名:" + cName); Log.d(TAG,"號碼:" + cNum); } cursor.close(); }
上面這一段代碼,就是一個最基礎的用法,利用了resolver獲取數據。只是調用了query方法,這個方法的參數以下:app
Insert
插入這一塊也利用聯繫人進行信息進行展現,一樣的須要添加一些權限控制, <uses-permission android:name="android.permission.WRITE_CONTACTS" />
下面直接給出代碼:ide
private void insertContact() throws RemoteException, OperationApplicationException { //使用事務添加聯繫人 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data"); ContentResolver resolver = getContentResolver(); ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri) .withValue("account_name", null) .build(); operations.add(op1); //依次是姓名,號碼,郵箱 ContentProviderOperation op2 = ContentProviderOperation.newInsert(dataUri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/name") .withValue("data2", "zorpan") .build(); operations.add(op2); ContentProviderOperation op3 = ContentProviderOperation.newInsert(dataUri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/phone_v2") .withValue("data1", "17806236835") .withValue("data2", "2") .build(); operations.add(op3); ContentProviderOperation op4 = ContentProviderOperation.newInsert(dataUri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/email_v2") .withValue("data1", "728606401@qq.com") .withValue("data2", "2") .build(); operations.add(op4); //將上述內容添加到手機聯繫人中 resolver.applyBatch("com.android.contacts", operations); Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT).show(); }
代碼就是這樣,很簡單,涉及到的就是一個數據類ContentProviderOperation ,這個類是用來存儲Content數據,具體的細節就很少說了,這個類在sdk能夠直接查看。每一個字段都有詳細的解釋。學習