ContentProvider:內容提供者,程式間 進行資料互動 、共享、跨程式通訊
ContentProvider 以表的形式將資料呈現給外部應用和其他程式,類似資料庫的形式(當一個APP單一的程式佔用記憶體過高是否考慮把一些功能,例如視訊播放、樂音播放等功能放到另一個程式中)。
1.ContentProvider基本操作
// 外部程式向 ContentProvider 中新增資料
public Uri insert(Uri uri, ContentValues values)
// 外部程式 刪除 ContentProvider 中的資料
public int delete(Uri uri, String selection, String[] selectionArgs)
// 外部程式更新 ContentProvider 中的資料
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
// 外部應用 獲取 ContentProvider 中的資料
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
// ContentProvider建立後 或 開啟系統後其它程式第一次訪問該ContentProvider時 由系統進行呼叫 
public boolean onCreate()
// 得到資料型別,即返回當前 Url 所代表資料的MIME型別
public String getType(Uri uri)
複製程式碼
2.ContentProvider的幾個東西
- 在系統中註冊讀內容提供者的許可權
<permission
android:name="xxxxx.xxxx.permission.READ_CONTENT" //指定許可權的名稱
android:label="Permission for read content provider"
android:protectionLevel="normal"
/>
複製程式碼
- URI :作為訪問的標識(地址),content://Authority/Path、content://Authority/Path/Id
Authority:授權資訊,用以區別不同的ContentProvider;
Path:表名;
id :id;
Uri uri = Uri.parse("content://xxxxx.xxxx./User/123")
複製程式碼
3.ContentResolver(ContentProvider叢集?代理?)
管理不同 ContentProvider,直接通過不同的URI操作不同的ContentProvider中的表
- ContentResolver基本操作
// 獲得ContentResolver
context.getContentResolver();
// 外部程式向 ContentProvider 中新增資料
public Uri insert(Uri uri, ContentValues values) 
// 外部程式 刪除 ContentProvider 中的資料
public int delete(Uri uri, String selection, String[] selectionArgs)
// 外部程式更新 ContentProvider 中的資料
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 
// 外部應用 獲取 ContentProvider 中的資料
public Cursor query(Uri uri, String[] projection,
複製程式碼
4.ContentUris類(操作Uril)
基本操作
//Uri追加ID
withAppendedId()
//Uri獲取ID
parseId()
複製程式碼
5.UriMatcher類(匹配Uri)
基本操作
//普通的初始化一下
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
matcher.addURI("xx.xx.xx", "uzi1", 1);
matcher.addURI("xx.xx.xx", "uzi2", 2);
//若 uri 為 :"content://xx.xx.xx/uzi1";
matcher.match(uri) = 1;
//若 uri 為 :"content://xx.xx.xx/uzi2";
matcher.match(uri) = 2;
複製程式碼
6.ContentObserver類(內容觀察者)
當ContentProvider 中的資料發生變化(增、刪 、改)時,就會觸發 ContentObserver類
// 註冊內容觀察者
ContentObserver getContentResolver().registerContentObserver(uri);
// 通知變化
public class UserContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
getContext().getContentResolver().notifyChange(uri, null);
}
}
// 登出觀察者
getContentResolver().unregisterContentObserver(uri);
複製程式碼
實踐博文推薦:https://www.cnblogs.com/mauiie/p/3737868.html