1. 理解
1). 為會么要有ContentProvider?
a. 數(shù)據(jù)庫文件只能當前應用訪問, 別的應用不能直接訪問
b. 在真實的應用需求中, 可能需要應用操作其它應用的數(shù)據(jù)庫表數(shù)據(jù)
2). ContentProvider是什么?
ContentProvider是四大應用組件之一
當前應用使用ContentProvider將數(shù)據(jù)庫表數(shù)據(jù)操作暴露給其它應用訪問
其它應用需要使用ContentResolver來調用ContentProvider的方法
它們之間的調用是通過Uri來進行交流的
2. 相關API:
1). ContentProvider: 內容提供者類
a. CRUD的方法: query(), insert(), update(), delete()
b. onCreate()\
a. CRUD的方法:
query(),
insert(),
update(),
delete()
b. 實現(xiàn)觀察的相關方法:
registContentObserver()
unRegistContentObserver()
notityChanged()
c.得到它的對象
context.getCOntentResolver();
3. ContentObserver: 內容觀察者類
void onChange(boolean selfChange) : 數(shù)據(jù)改變, 且執(zhí)行了notityChanged()
4). Uri: 包含一個具有一定格式的字符串所對應資源的類

A : 是一個前綴,表示是由ContentProvider提供,固定不變
B : authority, 標識是哪個Provider,不同的Provider此部分必須不同。
C : 對應于哪張表 student
D : id值, 對應表中的哪條記錄
5). UriMatcher: 用來識別uri的一個uri容器
//添加一個合法的URI
void addURI(String authority, String path, int code)
//匹配指定的uri, 返回匹配碼
int match(Uri uri)
6). ContentUris: 操作uri的工具類
//解析uri, 得到其中的id
long parseId(Uri contentUri)
//添加id到指定的uri中
Uri withAppendedId(Uri contentUri, long id)
3. 自定義ContentProvider
1).編寫ContentProvider子類
class StudentContentProvider extends ContentProvider {
//實現(xiàn)inert、delete、update和query等方法
}
2). 在manifest.xml中注冊
android:name=".StudentContentProvider"
android:authorities="com.atguigu.provider.studentprovider"
android:exported="true"/>//標識是否允許其它應用訪問,默認是false
4. 使用ContentResolver訪問ContentProvider
1). 得到ContentResolver的對象
2). 調用query(), delete(), update(), insert()方法調用ContentProvider對應的方法
操作ContentResolver: 注冊, 解注冊, 通知