編輯:Android開發實例
上篇 SQLite 的文章講述了 Andriod 系統的數據庫存儲讀寫,本篇將深入解析在 Android系統中如何共享不同應用的數據。
為什麼需要 Content Provider?
在 Android 中,每一個應用都運行在各自的進程中,當一個應用需要返問其他應用的數據時,也就是需要數據在不同的虛擬機之間傳遞,這樣的情況操作起來可能有些困難,所以 Google 引入了 Content Provider (內容提供商)來解決在不同的應用包之間的數據共享。
什麼是 Content Provider?
Content Provider,即內容提供商,再具體解釋就是:CP是移動數據業務內容提供商,或者叫移動增值業務內容提供商。它是一個類,這個類將它要共享的數據進行包裝,提供了一組供其他應用程序調用的接口方法,這些方法可以讓應用程序存儲和提取被包裝的數據。
了解 Content Provider
在 Android 中,Content Provider 是一個特殊的存儲數據類型,它提供了一套標准的接口用來獲取和操作數據。並且,Android 自身也是提供了現在的 Content Provider: Contacts、Browser、CallLog、Settings、MediaStore。應用可以通過唯一的 Content Provider 界面來使用具體的某個 Content Provider,然後就可以調用 ContentResolver 提供的方法來使用你需要的 Content Provider了。
使用 Content Provider
ContentResolver 提供了 query()、insert()、update()等來請求 Content Provider 。要使用這些方法,還會涉及URI。URI是一個String形式的 Content Provider 的完全路徑。
本篇例子,使用Content Provider實現了獲取聯系人信息然後展示的操作,先來看一下運行效果:
圖1為本地的所有聯系人電話清單
圖2 為加載的時候獲取聯系人的信息 代碼實現: package com.terry;
注意:此例子使用版本為:2.2如果你使用的是2.0以下版本上面代碼標記紅色的兩段代碼是可行的。即獲得電話號碼,但在2.0之後版本API就改了,如果你用2.2版本使用上面紅色代碼運行將會報錯。使用方法不是簡單的像使用獲取名稱一樣簡單。而是要通過到數據庫中查找而獲得,因為電話號碼可能不止一個,這可能也是Google 修復的一個bug。。所以在此建議如上寫法。
讀取聯系人API同樣需要聲明權限,權限代碼如下:
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
現在著重講述一下query這個方法,Content Provider 提供的虛函數 query方法必須返回一個能夠遍歷所求數據的Cursor對象,Cursor本身也是接口,但是Android一些可用的Cursor對象,例如,SQLiteCursor可以遍歷保存在SQLite 數據庫中的數據,通過調用SQLiteDatabase類的query方法就可以得到Cursor對象,還有其它不是保存在數據庫中的數據而設的Cursor實現,諸如MatrixCursor。由於在不同的進程和線程中的ContentResolver 對象都可以調用Content Provider 的方法,必須在線程安全模式下使用。 上面簡單的介紹了使用 Conent Provider 獲取數據的一個經典案例,更加詳細的使用方法請參閱有關書籍。 由於工程中有另外的例子,體積稍大傳不上來,有需要的可以email我,謝謝。 如果你有什麼疑問或者建議:Email:[email protected]
Android中TextView實現的多個可點擊的文本效果
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
這個功能可以幫你實現,在圖片上進行隨意的塗抹,可以用於SNS產品。 繪圖本身很簡單,但是要實現在圖片上指定的部分精確(位置,縮放)的繪圖,就有點麻煩了。 下面講講
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放