Android基礎之內容提供者

2021-08-21 23:34:53 字數 3736 閱讀 8538

應用程式建立的資料庫預設都是私有的,別的應用程式不可以訪問裡面的資料。如果有需求把自己應用程式私有的資料庫暴露給別的使用者,就需要使用內容提供者

a應用中

1,建立資料庫bankdbopenhelper

public

class

bankdbopenhelper

extends

sqliteopenhelper

@override

public

void

oncreate(sqlitedatabase db)

@override

public

void

onupgrade(sqlitedatabase db, int oldversion, int newversion)

}

2,建立類bankdbbackdoor繼承內容提供者

public

class

bankdbbackdoor

extends

contentprovider

@override

public

boolean

oncreate()

@override

public uri insert(uri uri, contentvalues values) else

return

null;

}@override

public

intdelete(uri uri, string selection, string selectionargs) else

return

0; }

@override

public

intupdate(uri uri, contentvalues values, string selection,

string selectionargs) else

return

0; }

@override

public cursor query(uri uri, string projection, string selection,

string selectionargs, string sortorder) else

}@override

public string gettype(uri uri)

}

3,在清單檔案中註冊內容提供者

"com.example.day09_01_contentprovider.bankdbbackdoor"

//必須配置該主機名,訪問者使用該主機名才能訪問

android:authorities="com.test.bank"

//是否支援其它應用呼叫當前元件

android:exported="true">

3,在mainactivity中建立資料庫

public

class

mainactivity

extends

activity

}

b應用中

呼叫a中的增刪改查方法

public

class

mainactivity

extends

activity

/*** 在介面上新增增刪改查的方法

*@param view

*///銀行行長利用後門新增資料

public

void

insert(view view)

public

void

delete(view view));

}public

void

update(view view));

}public

void

query(view view), null, null, null);

while (cursor.movetonext())

cursor.close();

}}

1,檢視資料庫,分析資料庫的表和字段

2,操作內容提供者需要uri

3,找到系統應用的源**,首先去清單檔案中查詢主機名authorities

"smsprovider" 

android:authorities="sms"

android:multiprocess="true"

android:readpermission="android.permission.read_sms"

android:writepermission="android.permission.write_sms" />

4,去對應的provider的源**中查詢匹配規則,確定表名

static
5,根據主機名和表名確定uri,使用contentresolver的增刪改查方法操作對應的資料庫

public

class

mainactivity

extends

activity

//向內容提供者中新增資料

public

void

add(view view)

//刪除內容提供者中資料

public

void

delete(view view));

}}

raw_contact:聯絡人的id表

contact_id 儲存聯絡人的id

data:聯絡人的資料表

rawcontactid 表示屬於哪個聯絡人

data1 具體的資料

mimetype_id 資料的型別,使用該id去mimetypes表中查詢資料型別

mimetypes:聯絡人的資料型別表

如何讀取聯絡人資料
contentresolver resolver = getcontentresolver(); 

//1.查詢raw_contact表,獲取所有聯絡人

id uri uri = uri.parse("content:");

uri datauri = uri.parse("content:");

cursor cursor = resolver.query(uri, new string, null, null, null);

while(cursor.movetonext()), "raw_contact_id=?", new string, null);

while(datacursor.movetonext())

datacursor.close();

system.out

.println("------------");

} cursor.close();

備註:加上read_contacts許可權

內容觀察者一般用於觀察系統資料庫的變化

使用例項:在其他應用中:

public

class

mainactivity

extends

activity

});}

}

Android基礎 內容提供者

google設計內容提供者的目的 為外部應用程式提供了統一的訪問資料庫的方式。編寫乙個內容提供者的步驟 1 在工程中新增乙個內容提供者的類,繼承了contentprovider型別,實現了增刪改查的方法 2 在清單檔案中配置乙個provider節點,指定authorities 相當於 的網域名稱,用...

android內容提供者

android四大元件之一,用於跨應用資料共享,我們自己的應用可以通過使用contentprovider機制獲取聯絡人資訊,簡訊,庫等資訊。不要以為只能運算元據庫資料。用getcontentresolver query insert update delete 等方法對錶進行操作 如 獲取聯絡人名字...

Android內容提供者

一 為什麼需要內容提供者元件 使用內容提供者把私有的資料庫內容暴露出來 原理 1.內容提供者把資料進行封裝,然後提供出來,其他應用都是通過內容解析者來訪問 2.定義內容提供者,定義乙個類繼承contentprovider 二 實現內容提供者步驟 1.定義乙個類繼承 contentprovider 2...