內容提供者

2021-09-19 15:56:18 字數 2616 閱讀 6748

網路程式設計1

網路程式設計2

廣播接收者

服務內容提供者

多**​ (回顧)如何建立乙個資料庫 建立乙個類myopenhelper去繼承sqliteopenhelper

linux許可權圖

chmod指令 可以修改linux下的檔案許可權(10進製)

如果程式想訪問別的程式下的私有資料庫,要通過通過乙個方法叫opendatabase來獲取到sqlitedatabase物件,還要通過chmod命令在adb shell裡面修改資料庫的許可權,此時顯然過於麻煩,而且不好實現,所以有了內容提供者

/**

* path:路徑

* factory 游標工廠

* flags 訪問的模式

*/sqlitedatabase.

opendatabase

(path,factory,flags)

;

使用內容提供者 把私有的資料庫內容給暴露出來

官方文件介紹翻譯(機翻):

內容提供者是android應用程式向應用程式提供內容的主要構建塊之一(四大元件之一)。它們通過單個contentresolver介面封裝資料並提供給應用程式。只有在需要在多個應用程式之間共享資料時,才需要內容提供程式。例如,多個應用程式使用聯絡人資料,並且必須儲存在內容提供程式中。如果不需要在多個應用程式之間共享資料,可以直接通過sqlitedatabase使用資料庫。

當通過contentresolver發出請求時,系統檢查給定uri的許可權,並將請求傳遞給在該許可權下註冊的內容提供者。內容提供者可以按照自己的意願解釋uri的其餘部分。urimatcher類有助於解析uri

需要實現的主要方法有:

oncreate()來初始化提供程式

query(uri, string , string, string , string),它向呼叫者返回資料

insert (uri, contentvalues),它將新資料插入到提供的內容中

update(uri、contentvalues、string、string ),用於更新內容提供程式中的現有資料

delete (uri, string, string)從提供的內容中刪除資料

gettype (uri),它返回內容提供程式中資料的mime型別

資料訪問方法(如insert (uri, contentvalues)和update (uri, contentvalues, string, string)可以同時從多個執行緒呼叫,而且必須是執行緒安全的。其他方法(如oncreate())只能從應用程式主線程呼叫,必須避免執行冗長的操作。有關它們預期的執行緒行為,請參見方法描述

內容提供者把資料進行封裝然後提供出來 其他應用都是通過內容解析者來訪問

定義內容提供者 定義乙個類繼承contentprovider

在清單檔案裡配置內容提供者

寫乙個靜態**塊 新增匹配規則

//[1]定義乙個urimatcher   定義路徑介面卡

private

static

final urimatcher surimatcher =

newurimatcher

(urimatcher.no_match)

;//定義匹配碼

private

static

final

int querysucess =0;

//[2]定義靜態**塊 定義匹配規則 隨著類的載入,靜態**塊就執行,且只執行一次

static

暴露你想暴露的方法(增刪改查)

現在其他的應用就可以通過內容解析著來運算元據庫了

在上下文環境下直接獲取

三張重要的表

一、data data1列裡存的是所有聯絡人的資訊

二、data表裡面的raw_contact_id 實際上是raw_contact表的contact_id

三、data表裡面的minetype_id列 實際對應的是minetype表

實現步驟

先讀取raw_contact表 讀取contact_id欄位 從而知道手機裡有幾條聯絡人資訊

再讀取data表 根據raw_contact_id 去讀取data1列 和mimetype_id

先往raw_contact表 往contact_id列插入資料

同步到data表 data1列存是所有聯絡人的資料

內容提供者

public class personcontentprovider extends contentprovider override public boolean oncreate 作用 判斷 傳進來的 uri 查詢的是一條資料 還是多條資料 override public string gett...

內容提供者

package com.xh.tx.utils import android.content.context import android.database.sqlite.sqlitedatabase import android.database.sqlite.sqlitedatabase.cur...

內容提供者

讀取系統簡訊,首先查詢原始碼獲得簡訊資料庫內容提供者的主機名和路徑,然後 contentresolver cr getcontentresolver cursor c cr.query uri.parse content sms new string,null,null,null while c.m...