android学习笔记五。2、其他组件
一、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.java2、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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于bootstrap 的AceAdmi
- 下一篇: 推荐一款好用的Bootstrap后台管理