android學習筆記五。2、其他組件

來源:互聯網
上載者:User

標籤:

一、ContentProvider內容提供者.是是android中一個應用向第三方共用資料的方式,android中的連絡人,sms(簡訊記錄)等都是通過這一方式來向外提供的

  1、使用:

    在應用中使用ContentProvider提供的資料並不是直接使用的,而是需要通過ContentResolver來實現的,ContentResolver中包含query/insert/delete/update等方法用於操作資料,但其內部就是調用ContentProvider的實作類別來真正操作的。

使用ContentProvider擷取sms資料的例子

  上面的使用過程分三步:

  ①指定訪問URI,

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

  ③對擷取資料/結果進行處理。

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

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

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

  現在大家應該知道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.

  注意:關於匹配ContentProvider的URI規則見自訂ContentProvider部分。

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

ContentResolver源碼

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

cquireUnstableProvider源碼(檢測uri的scheme)

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

  ③、增刪查改中最重要的就是查詢的結果即Cursor的處理。Cursor就是一個資料的集合,可以擷取某一行然後讀取其中的資料。該類是一個介面類。

  2、自訂ContentProvider:這是自己項目對外提供資料的一種方式,最好的方式就是以android提供的範本進行建立,這裡參考的是android的sample:notepad。這個項目中有3個檔案比較重要,詳細說明:

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

NotePad.java

  2、NotePadProvider.java:這個類就是自訂的ContentProvider,需要繼承ContentProvider類並至少實現增刪改查方法還有構造方法。在這個例子中,可以看到使用了以下幾個類:

  ①DatabaseHelper:一個資料庫協助類,繼承自SQLiteOpenHelper。

DatabaseHelper源碼

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

UriMatcher部分源碼

  ③SQLiteQueryBuilder:該類是用來構建查詢語句的。

 

  3、AndroidManifest.xml:這裡需要注意的是資訊清單檔中provider聲明的部分

資訊清單檔

  其中比較重要的是android:authorities和許可權的聲明,其實ContentProvider有非常複雜的許可權管理,詳見:http://iwillbemyself.blog.163.com/blog/static/1702232282012115104056917/,

  對於自訂ContentProvider還有一點比較重要的就是當操作的資料庫有所改變時,應該通知相應的ContentObserver(內容觀察者)進行處理。

二、BroadcastReceiver廣播接收者,廣播是Android中傳遞事件的方式,有兩個方面:廣播寄件者和廣播接收者。

1、廣播寄件者可以發送兩種廣播:同步廣播有序廣播,兩者的區別是

  ①接收順序的區別:同步廣播同步接收,有序廣播可以通過指定優先順序來設定接收順序

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

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

  ①在資訊清單檔中進行配置,

  ②繼承BroadcastReceiver對象,並重寫onReceive方法,在其中實現功能即可。

有序廣播通過指定優先順序來確定接收順序,優先順序從-1000~1000,

  ①如果同一個應用中的優先順序相同,則在資訊清單檔中前面的先接收

  ②如果不同應用中的優先順序相同,則先安裝的應用先接收

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

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

android學習筆記五。2、其他組件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.