內容提供器

內容提供器注要用於在不同的應用程序之間實現數據共享的功能,它提供了一套完整的機制,允許一個程序訪問另一個程序中的數據,同時還能保證被訪問數據的安全性。目前,使用內容提供器是Android實現跨程序共享數據的標準方式。

內容選擇器可以選擇只對那一部分數據進行共享,從而保證我們的程序中的隱私數據不會有泄露的風險。

運行時權限

爲了避免一些軟件隨意申請權限,Android採取運行時申請權限,只有在涉及到某權限時,纔會讓用戶來決定是否同意申請。所有權限分爲普通權限和危險權限,以下是Android的9種24個權限:
在這裏插入圖片描述

ContentResolve的基本用法

ContentResolve中的增刪查改方法都是不接收表名參數的,而是使用一個Uri參數代替,這個參數被稱爲內容URI。內容URI給內容提供器中的數據建立了唯一的標識符,主要由兩部分組成:authority和path。authority是用於對不同的應用程序作區分,一般爲了避免衝突,都會採用程序包名的方式來進行命名。path則是用於對同一應用程序中不同的表作區分,通常都會添加到authority的後面。
得到URI字符串後,需要將其解析成Uri對象纔可以作爲參數傳入。代碼如下:

Uri uri = Uri.parse("content://com.example.app.provider/table1");

現在就可以使用這個Uri對象來查詢表中數據,代碼如下:

Cursor cursor = getContentResolver().query(
	uri,
	projection,
	selection,
	selectionArgs,
	sortOrder);

下面對這些參數進行解釋:
uri:指定查詢某個應用程序下的一張表;
projection:指定查詢的列名;
selection:指定where的約束條件;
selectionArgs:爲where中的佔位符提供具體的值;
sortOrder:指定查詢結果的排序方式。

查詢返回的仍然是一個Cursor對象,這時就可以通過移動遊標來遍歷Cursor的所有行,然後再取出相應數據,代碼如下:

if (cursor != null) {
	while (cursor.moveToNext()) {
		String column1 = cursor.getString(cursor.getColumnIndex("colum1"));
		int coulimn2 = cursor.getInt(cursor.getColumnIndex("column2"));
	}
}

添加數據代碼:

ContentValues values = new ContentValues();
values.put("column1","text");
values.put("column2",1);
getContentResolver().insert(uri,values);

更新數據代碼:

ContentValues values = new ContentValues();
values put("column1"," ")'
getConentResolver().update(uri,values,"column1 = ? and column2 = ?".new String[] { "text","1" });

刪除數據代碼

getContentResolver().delete(uri,"column2 = ?",new String[] {"1"});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章