最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

ContentProvider數(shù)據(jù)共享

2021-07-07 16:18 作者:獨(dú)行D暗靈  | 我要投稿

ContentProvider類

  • 在某些情況下,Android應(yīng)用程序需要對外暴露自己的數(shù)據(jù),以便其他應(yīng)用程序進(jìn)行訪問,從而完成系統(tǒng)中不同Android應(yīng)用程序之間的數(shù)據(jù)共享,這就需要使用ContentProvider。

  • ContentProvider是不同應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換的標(biāo)準(zhǔn)API,也是所有應(yīng)用程序之間數(shù)據(jù)存儲和檢索的橋梁。

  • ContentProvider類中的數(shù)據(jù)操作方法多數(shù)為抽象方法,需要實(shí)現(xiàn)這些方法;方法中用到Uri參數(shù)

  • Uri是ContentProvider對外提供一個自身數(shù)據(jù)集的唯一標(biāo)識

  • ContentProvider將會為每個數(shù)據(jù)集分配一個獨(dú)立且唯一的Uri


  • UriMatcher工具類對Uri進(jìn)行匹配判斷,該工具類提供了兩個方法∶

  • void addURI(String authority,String path,int code)

    • 用于注冊Uri

    • authority和path組合成一個Uri ; Code代表Uri對應(yīng)的標(biāo)識碼

  • int match(Uri uri)

    • 根據(jù)前面注冊的Uri判斷指定的Uri對應(yīng)的標(biāo)識碼,如果找不到匹配的標(biāo)識碼則返回-1


  • ContentUris工具類,用于操作Uri字符串,該工具類提供了兩個方法∶

    • withAppendedld(uri,id)∶用于為Uri路徑加上ID部分

    • parseld(uri)∶用于從指定的uri中解析出所包含的lD值

  • ContentResolver用來間接操作ContentProvider中的數(shù)據(jù)

  • 通過Context的getContentResolver()方法來獲取ContentResolver實(shí)例對象


ContentProvider程序

  • 開發(fā)ContentProvider程序的步驟︰

    1. 創(chuàng)建一個ContentProvider子類,實(shí)現(xiàn)增刪改查等抽象方法;

    2. 在AndroidManifest.xml配置文件中注冊ContentProvider,并指定android:authorities屬性;

    3. 通過Activity使用ContentProvider。Activity和Service等組件都可以獲取ContentProvider對象,并調(diào)用該對象相應(yīng)的方法進(jìn)行操作。

  • 創(chuàng)建ContentProvider子類

    ?//創(chuàng)建一個繼承于contentProvider的類
    ?public class FirstProvider extends ContentProvider {
    ?//第一次創(chuàng)建該coontentProvide時調(diào)用該方法
    ?override
    ?public boolean onCreate ( ) {
    ?Log.i ( "FirstProvider" , "===onCreate方法被調(diào)用===") ;return true;
    ?)
    ?...--
    ?

  • ContentProvider子類中實(shí)現(xiàn)query()方法(2/7 )

    ?..…
    ?<!--實(shí)現(xiàn)查詢方法,該方法返回查詢得到的cursor -->
    ? ? ?@override
    ?public Cursor query(Uri uri,string[] projection,string where,string []whereArgs,string sortorder) {
    ?Log.i ( "FirstProvider" , "===query方法被調(diào)用===") ;
    ?Log.i("FirstProvider" , "uri參數(shù)為: "+uri+"where參數(shù)為: "+where) ;return null;
    ?

  • ContentProvider子類中實(shí)現(xiàn)insert()方法

    ?<!--實(shí)現(xiàn)插入的方法,該方法應(yīng)該返回新插入的記錄的uri -->
    ? ? ?@override
    ?public Uri insert (Uri uri, Contentvalues values) {
    ?Log.i ( "FirstProvider" , "===insert方法被調(diào)用===") ;Log.i("FirstProvider" , "values參數(shù)為: "+values ) ;return uri;
    ?)
    ?

  • ContentProvider子類中實(shí)現(xiàn)update()方法

    ?<! --實(shí)現(xiàn)更新方法,該方法應(yīng)該返回被更新的記錄條數(shù)-->
    ? ? ?@override
    ?public int update(Uri uri,Contentvalues values,string where,
    ?string [ ] whereArgs) {
    ?Log.i ( "FirstProvider" , "===update方法被調(diào)用===") ;
    ?Log.i ( "FirstProvider", "where參數(shù)為:"+where+" , values參數(shù)為:"+values) ;
    ?return l;
    ?}
    ?

  • ContentProvider子類中實(shí)現(xiàn)delete()方法

    ?<! --實(shí)現(xiàn)刪除方法,該方法應(yīng)該返回被刪除的記錄條數(shù)-->
    ? ? ?@override
    ?public int delete(Uri uri,string where,string [ ] whereArgs){
    ?Log.i ( "FirstProvider" , "===delete方法被調(diào)用===" ) ;
    ?Log.i ( "FirstProvider" , "where參數(shù)為: "+where) ;return l;
    ?)
    ?

  • 使用<provider>子元素注冊ContentProvider

    ?<!--注冊一個contentProvider -->
    ?<provider
    ?android : name=". FirstProvider"
    ?android:authorities="com.qst.chapter07.Firstprovider"android:exported="true">
    ?</provider>
    ?

    • name屬性指定ContentProvider的實(shí)現(xiàn)類

    • authorities屬性指定該ContentProvider對應(yīng)的Uri

    • exported屬性指定該ContentProvider是否允許其他應(yīng)用調(diào)用

  • 使用ContentProvider操作數(shù)據(jù)

    ?Uri uri=Uri.parse ( "content : / / com.qst.chapter08.firstprovider/ " );
    ?ContentResolver contentResolver=getContentResolver ( );…-
    ?cursor
    ?c=contentResolver. query (uri, null , "query_where" , null,null);...
    ?Uri newUri=contentResolver.insert(uri, values) ;
    ?contentResolver.update (uri, values, "update_where" , null);
    ?contentResolver.delete (uri , "delete_where" , null) ;
    ?


操作系統(tǒng)的ContentProvider

  • Android系統(tǒng)本身提供了大量的ContentProvider,例如聯(lián)系人信息、系統(tǒng)的多媒體信息等。

  • 開發(fā)人員可以通過ContentResolver來調(diào)用系統(tǒng)ContentProvider所提供的增刪改查方法來對Android內(nèi)部數(shù)據(jù)進(jìn)行操作。


  • Android系統(tǒng)用于管理聯(lián)系人的ContentProvider的Uri有以下三種:

    • ContactsContract.Contacts.CONTENT_URI∶管理聯(lián)系人的Uri

    • ContactsContract.CommonDataKinds.Phone.CONTENT_URI∶管理聯(lián)系人的電話Uri

    • ContactsContract.CommonDataKinds.Email.CONTENT_URI∶管理聯(lián)系人的E-mail的Uri

  • Android系統(tǒng)為多媒體提供了相應(yīng)的ContentProvider的Uri :

    • MediaStore.Audio.Media.EXTERNAL_CONTENT_URI∶存儲在外部SD存儲卡中的音頻文件的Uri

    • MediaStore.Audio.Media.INTERNAL_CONTENT_URI∶存儲在手機(jī)內(nèi)存中的音頻文件的Uri

    • MediaStore.Images.Media.EXTERNAL_CONTENT_URI∶存儲在外部SD存儲卡中的圖片文件的Uri



ContentProvider數(shù)據(jù)共享的評論 (共 條)

分享到微博請遵守國家法律
台东市| 赣州市| 博罗县| 桃江县| 平谷区| 腾冲县| 高唐县| 永康市| 伊金霍洛旗| 梓潼县| 丰顺县| 秦安县| 东安县| 鸡东县| 东城区| 新宁县| 屏南县| 台北县| 大足县| 徐州市| 和田市| 新邵县| 田阳县| 乌兰浩特市| 合作市| 诏安县| 克拉玛依市| 云梦县| 新和县| 三都| 婺源县| 托里县| 昭平县| 电白县| 科技| 无为县| 天等县| 清涧县| 宜城市| 若尔盖县| 塔城市|