Android知識點複習4(ContentProvider)

超高校級的騷豬發表於2018-02-06

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)&emsp; 
// 外部程式 刪除 ContentProvider 中的資料 
public int delete(Uri uri, String selection, String[] selectionArgs) 
// 外部程式更新 ContentProvider 中的資料 
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)&emsp; 
// 外部應用 獲取 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

相關文章