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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android学习笔记五。2、其他组件

發(fā)布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android学习笔记五。2、其他组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、ContentProvider內(nèi)容提供者.是是android中一個應(yīng)用向第三方共享數(shù)據(jù)的方式,android中的聯(lián)系人,sms(短信記錄)等都是通過這一方式來向外提供的

  1、使用:

    在應(yīng)用中使用ContentProvider提供的數(shù)據(jù)并不是直接使用的,而是需要通過ContentResolver來實現(xiàn)的,ContentResolver中包含query/insert/delete/update等方法用于操作數(shù)據(jù),但其內(nèi)部就是調(diào)用ContentProvider的實現(xiàn)類來真正操作的。

使用ContentProvider獲取sms數(shù)據(jù)的例子

  上面的使用過程分三步:

  ①指定訪問URI,

  ②通過getContentResolver()獲取ContentResolver對象,然后進行增刪改查操作

  ③對獲取數(shù)據(jù)/結(jié)果進行處理。

  上面是簡述,下面對其中使用的內(nèi)容進行詳細說明:

    ①、URI:最早使用到的地方就是在Intent進行匹配的時候,其實這時的URI是和data向匹配的:

content://  com.example.project   :200????? /folder/subfolder/etc
\---------/? \---------------------------/ \---/ \--------------------------/
scheme???????????????? host??????????????     port??????? path
??????????????? \--------------------------------/
????????????????????????? authority? ?

  現(xiàn)在大家應(yīng)該知道data flag中那些屬性的含義了吧,看下data flag
  <data android:host="string"
????  ? android:mimeType="string"
?????   android:path="string"
?????   android:pathPattern="string"
????  ? android:pathPrefix="string"
????  ? android:port="string"
?????   android:scheme="string" />

  在使用ContentProvider時對URI有一個要求:就是其scheme必須是content,原因見2.

  注意:關(guān)于匹配ContentProvider的URI規(guī)則見自定義ContentProvider部分。

  ②、以query()為例,ContentResolver對象最終會調(diào)用的方法的源碼見下

ContentResolver源碼

  其中可以看到第一步是檢測傳入的uri是否為空,第二部就是對傳入uri的scheme進行檢測,判斷其是否為content

cquireUnstableProvider源碼(檢測uri的scheme)

  同時可以看到是調(diào)用了ContentProvider對象進行真正的查詢操作。這樣做是為了簡化對ContentProvider的操作,和進行安全檢測等。

  ③、增刪查改中最重要的就是查詢的結(jié)果即Cursor的處理。Cursor就是一個數(shù)據(jù)的集合,可以獲取某一行然后讀取其中的數(shù)據(jù)。該類是一個接口類。

  2、自定義ContentProvider:這是自己項目對外提供數(shù)據(jù)的一種方式,最好的方式就是以android提供的范本進行創(chuàng)建,這里參考的是android的sample:notepad。這個項目中有3個文件比較重要,詳細說明:

  1、NodePad.java:這個類中定義了一些與訪問有關(guān)的屬性,例如URI,列的名字等。這個類要和ContentProvider配合使用。

NotePad.java

  2、NotePadProvider.java:這個類就是自定義的ContentProvider,需要繼承ContentProvider類并至少實現(xiàn)增刪改查方法還有構(gòu)造方法。在這個例子中,可以看到使用了以下幾個類:

  ①DatabaseHelper:一個數(shù)據(jù)庫幫助類,繼承自SQLiteOpenHelper。

DatabaseHelper源碼

  ②UriMatcher:這個對象的作用是用來指定匹配該ContentProvider的URI的匹配規(guī)則。

UriMatcher部分源碼

  ③SQLiteQueryBuilder:該類是用來構(gòu)建查詢語句的。

?

  3、AndroidManifest.xml:這里需要注意的是清單文件中provider聲明的部分

清單文件

  其中比較重要的是android:authorities和權(quán)限的聲明,其實ContentProvider有非常復(fù)雜的權(quán)限管理,詳見:http://iwillbemyself.blog.163.com/blog/static/1702232282012115104056917/,

  對于自定義ContentProvider還有一點比較重要的就是當(dāng)操作的數(shù)據(jù)庫有所改變時,應(yīng)該通知相應(yīng)的ContentObserver(內(nèi)容觀察者)進行處理。

二、BroadcastReceiver廣播接收者,廣播是Android中傳遞事件的方式,有兩個方面:廣播發(fā)送者和廣播接收者。

1、廣播發(fā)送者可以發(fā)送兩種廣播:同步廣播有序廣播,兩者的區(qū)別是

  ①接收順序的區(qū)別:同步廣播同步接收,有序廣播可以通過指定優(yōu)先級來設(shè)置接收順序

  ②是否可以中斷的區(qū)別:由于有序廣播有順序,才有可能將廣播進行中斷,不讓后來者進行接收;而同步廣播則不能中斷。

2、廣播接收者:廣播發(fā)送的具體內(nèi)容就是一個隱式意圖對象(因為通常是給另外的應(yīng)用使用的),接收者通過兩步來實現(xiàn)

  ①在清單文件中進行配置,

  ②繼承BroadcastReceiver對象,并重寫onReceive方法,在其中實現(xiàn)功能即可。

有序廣播通過指定優(yōu)先級來確定接收順序,優(yōu)先級從-1000~1000,

  ①如果同一個應(yīng)用中的優(yōu)先級相同,則在清單文件中前面的先接收

  ②如果不同應(yīng)用中的優(yōu)先級相同,則先安裝的應(yīng)用先接收

參考:http://blog.csdn.net/xiazdong/article/details/7768807,

http://www.runoob.com/w3cnote/android-tutorial-broadcastreceiver.html

轉(zhuǎn)載于:https://www.cnblogs.com/songfeilong2325/p/5446546.html

總結(jié)

以上是生活随笔為你收集整理的android学习笔记五。2、其他组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。