日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中contentProvider的用途

發布時間:2024/9/27 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中contentProvider的用途 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用內容供應商共享數據

如果直接訪問磁盤文件(SDCard|File|SQLite數據庫|首選項),需要很多底層的交互細節,但該種方式,只使用url即可對應用程序進行訪問,并統一了數據訪問方式。

public?class?PersonContentProvider?extends?ContentProvider{

//在該生命周期中才能正確得到Content對象。

public?boolean?onCreate(){

//...

}

public?Uri?insert(Uri?uri,ContentValues?values);?

....

}?

<application?android:icon="@drawable/icon"

Android:label="@string/app_name">

<!--注冊供應商-->

<provider?android:name=".PersonContentProvider"

Android:authorities="cn.itcast.providers.personprovider"/>

</application>

URI:

Content://cn.itcast.provider.personprovider/person/10

Scheme?????????主機名或authority??????路徑??

Scheme:android規定,必須是content://

Authority:唯一標識該供應商。

path:代表操縱的數據。

將字符串轉換成Uri對象

Uri?uri?=?Uri.parse("content://xxxx/person/10");

UriMatcher:

使用該類,可以判斷Uri如何哪一種模式

//若不匹配,返回UriMather.NO_MATCH

UriMatcher?sMatcher?=?new?UriMatcher(UriMatcher.NO_MATCH);

//一次添加匹配的模式串,以及匹配后返回的數值

//${authority}???${path}

sMatcher.addURI("cn.itcast.contentprovider","person",1);

sMatcher.addURI("cn.itcast.contentprovider","person/#",2);

switch(sMatcher.match(Uri)){

case?1:

case?2

.....

}

//獲取uri后邊ID部分的話,可以通過

Uri?uri?=?Uri.parse("content://cn.itcast.provider.personprovider/person");

Uri?resultUri?=?ContentUris.withAppendedId(uri,10);?//...person/10

Uri.parse("content://cn.itcast.provider.personprovider/person/10")

Long?personid?=?ContentUris.parseId(uri);

XxxContentProvider?extends?ContentProvider{

....

//該方法用于返回當前Url所代表數據的MIME類型,如果操作的數據屬于集合類型,

//那么MIME類型字符串應該以vnd.android.cursor.dir/開頭

//如:''vnd.android.cursor.dir/person"

//如果要操作的數據屬于非集合類型數據,那么MIME類型字符串應該以

//vnd.android.cursor.item/開頭

//如:vnd.android.cursor.item/person

public?String?getType(Uri?uri){..};?

}

使用內容解析器(ContentResolver):

ContentResolver?resolver?=?getContentResolver();

Uri?uri?=?Uri.parse("content://cn.itcast.provider.personprovider/person");

ContentValues?values?=?new?ContentValues();

values.put("name",?"itcast");

values.put("age",?25);

//插入

resolver.insert(uri,?values);

//查詢

resolver.query(uri,?null,?null,?null,?"personid?desc");

//更新

resolver.update(updateIdUri,?updateValues,?null,?null);

//刪除

resolver.delete(deleteIdUri,?null,?null);

監聽contentprovider的數據變化

//供應商中的crud方法完成后需要發出數據變更的通知,以通知那些感興趣的監聽者

XxxContentProvider?extends?ContentProvider{

public?long?insert(){

...

getContext().getContentResolver().notifyChange(uri,null);

}

}

內容解析器如若要對數據變更,需要使用ContentObserveruri進行監聽,收到通知后,回調處理方法onChange();

context.getContentResolver().registerContentObserver(uri,true,new?MyContentObserver(new?Handler()));

class?MyContentObServer?extends?ContentObserer{

public?MyContentObServer(Handler?handler){

super(handler);

}

public?void?onChange(){...}

}

監聽用戶發送(接收)的短信

系統自帶的短信程序發送(或接收)短信時,會通過ContentProvider把短信保存進數據庫,并且

發出一個變更通知(notifyChange).使用ContentObserver對數據變化進行監聽,在用戶發送

短信時,就會被ContentObserver竊聽到短信.

//系統

Context.getContentResolver().notifyChange("content://sms",null);

//客戶端:

Context.getContentResolver().registerObserver(uri,false,new?

ContentObserver(new?Handler()){});

//?content://sms/outbox

//?content://sms/outbox

//?content://sms/outbox

Cursor?cursor?=?

getContentResolver().query(Uri.parse("content://sms/outbox"),null,?

cursor.getInt(cursor.getColumnIndex("_id")));

cursor.getString(cursor.getColumnIndex("address")));

cursor.getString(cursor.getColumnIndex("body")));

cursor.getLong(cursor.getColumnIndex("date")));

:

??<uses-permission?android:name="android.permission.READ_SMS"?/>

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Android中contentProvider的用途的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。