




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android基礎(chǔ)與應(yīng)用開(kāi)發(fā)教程大連理工大學(xué)出版社Android的內(nèi)容提供者和意圖第5章5.1 Android內(nèi)容提供者(Content Provider)5.1.1 Android內(nèi)部的內(nèi)容提供者5.1 Android內(nèi)容提供者(Content Provider)5.1.2 內(nèi)容提供者系統(tǒng)結(jié)構(gòu)現(xiàn)在我們轉(zhuǎn)向android. content包。應(yīng)用程序可用該包中的ContentResolver類實(shí)例作為客戶端來(lái)訪問(wèn)另一應(yīng)用程序中ContentProvider類實(shí)例的同名方法來(lái)共享數(shù)據(jù)(首選項(xiàng)、文件、SQLite數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)中的數(shù)據(jù))。ContentResolver對(duì)象的方法提供了持久性存儲(chǔ)的基本
2、CRUD(創(chuàng)建,檢索,更新和刪除)功能。為了解這個(gè)內(nèi)容提供者如何通過(guò)Android和SQLite工具來(lái)操縱它,下面我們將考察它的某些基本結(jié)構(gòu)元素和這些內(nèi)容提供者與業(yè)界使用的其他數(shù)據(jù)存取手段的關(guān)系。內(nèi)容提供者通過(guò)URI將其數(shù)據(jù)提供給客戶,這與Web站點(diǎn)將其內(nèi)容通過(guò)URL提供給客戶相似。移動(dòng)設(shè)備上的每個(gè)內(nèi)容提供者都使用authorities(類似于域名)注冊(cè),該字符串是URI的基礎(chǔ)。5.1 Android內(nèi)容提供者(Content Provider)5.1.2 內(nèi)容提供者系統(tǒng)結(jié)構(gòu)3. WHERE子句內(nèi)容提供者提供了兩種傳遞W HERE子句的方式:1)通過(guò)URI; 2)通過(guò)字符串子句與可替換字符串?dāng)?shù)
3、組的組合。下面通過(guò)一些示例代碼來(lái)說(shuō)明它們的作用。(1)通過(guò)URI傳遞WHERE子句:假定我們想在Google notes數(shù)據(jù)庫(kù)中檢索一個(gè)ID為23的note。(2)顯式W HERE子句:它是用Activity的managedQuery)方法建立WHERE子句的方式。5.1 Android內(nèi)容提供者(Content Provider)5.1.2 內(nèi)容提供者系統(tǒng)結(jié)構(gòu)4.插入記錄了解和利用URI的內(nèi)容提供者檢索數(shù)據(jù)后,我們轉(zhuǎn)向插人、更新和刪除數(shù)據(jù)的問(wèn)題。Android利用android, content. ContentValues類。保存要插人的某個(gè)記錄值。然后請(qǐng)求android, content
4、. ContentResolver用URI插人該記錄。ContentValues是關(guān)鍵字/值對(duì)的集合(類似于列名/值)。5.1 Android內(nèi)容提供者(Content Provider)5.1.2 內(nèi)容提供者系統(tǒng)結(jié)構(gòu)5.給內(nèi)容提供者添加文件偶爾也需要向數(shù)據(jù)庫(kù)中存儲(chǔ)文件。通常是將該文件存盤,然后更新數(shù)據(jù)庫(kù)中指向該文件名的記錄。Android采用并自動(dòng)執(zhí)行這個(gè)協(xié)議,辦法是定義一個(gè)存儲(chǔ)和檢索這些文件的過(guò)程。Android采用了一種約定,它把文件名引用存儲(chǔ)在一個(gè)有保留列名_data的記錄中。記錄插人表中后,Android就把該URI返回給調(diào)用者。一旦用這種機(jī)制保存了記錄,必須將文件保存在那里才能跟蹤
5、它。為做到這點(diǎn),Android讓ContentResolver接收該數(shù)據(jù)庫(kù)記錄的Uri,并返回一個(gè)可寫輸出流。而在幕后,Android實(shí)際是分配了一個(gè)內(nèi)部文件,并將文件名引用存儲(chǔ)在_data字段中。5.1 Android內(nèi)容提供者(Content Provider)5.1.3 內(nèi)容提供者的實(shí)現(xiàn)我們已經(jīng)討論了如何用內(nèi)容提供者獲取所需數(shù)據(jù),本節(jié)將編寫一個(gè)內(nèi)容提供者應(yīng)用程序。為此必須擴(kuò)展android. content. ContentProvider并實(shí)現(xiàn)主要方法:query,insert,update,delete,getType, getType。具體地說(shuō),為創(chuàng)建該應(yīng)用程序我們必須完成下列步驟
6、:(1)規(guī)劃所用的數(shù)據(jù)庫(kù)、URI和列名等,并創(chuàng)建一種元數(shù)據(jù)類來(lái)定義這些元數(shù)據(jù)元素的常量。(2)擴(kuò)展ContentProvider抽象類。(3)實(shí)現(xiàn)其中的方法:query,insert,update,delete和getType。(4)在manifest文件中注冊(cè)提供者。5.1 Android內(nèi)容提供者(Content Provider)5.1.4 注冊(cè)內(nèi)容提供者最后,必須在Android. Manifest. xml文件內(nèi)用下述標(biāo)記注冊(cè)內(nèi)容提供者:Gprovider android:name=BooksProviderandroid: authorities=”com, androidbook
7、, provider. BookProvider”/到此我們完成了有關(guān)內(nèi)容提供者的全部討論。5.2 Android意圖(Intent)Android的意圖(Intent)概念包含很多的創(chuàng)意。意圖可從在一個(gè)應(yīng)用程序中激活另一個(gè)應(yīng)用程序、激活內(nèi)部或外部的組件、引發(fā)事件讓其他意圖用類似于出版一訂閱方式進(jìn)行響應(yīng),也可以用意圖來(lái)表示行動(dòng)(Action) 。從根本上說(shuō),意圖是讓Android激活某個(gè)行動(dòng),且所激活的所行動(dòng)取決于它所注冊(cè)的內(nèi)容。譬如我們創(chuàng)建了這樣一個(gè)活動(dòng):5.2 Android意圖(Intent)5.2.1 意圖類在Android內(nèi)打包了許多預(yù)制應(yīng)用程序和激活它們的意圖對(duì)象(Intent)
8、,運(yùn)行這些程序能夠?qū)σ鈭D進(jìn)行測(cè)試。這些應(yīng)用程序(對(duì)不同SDK版本所有區(qū)別)是:1)瀏覽器應(yīng)用程序:打開(kāi)瀏覽器窗口;2)電話呼叫應(yīng)用程序:可呼叫某電話號(hào);3)電話撥號(hào)應(yīng)用程序:它顯示一個(gè)電話撥號(hào)盤,用戶可用它輸人電話號(hào)并通過(guò)UI進(jìn)行呼叫;4)繪圖應(yīng)用程序:它顯示給定經(jīng)緯度坐標(biāo)的世界地圖;5)詳細(xì)地圖應(yīng)用程序:它顯示出Google的街景視圖。5.2 Android意圖(Intent)5.2.2 意圖和URI我們首先從最簡(jiǎn)單的意圖開(kāi)始,其中要做的所有事情就是給行動(dòng)起一個(gè)名字。代碼5-13中的ACTION_ DIAL活動(dòng)就是行動(dòng)名(或意圖常數(shù))之一。因此,要激活電話撥號(hào)盤,所需要的全部東西只是撥號(hào)盤的
9、行動(dòng)而已,再不需要?jiǎng)e的東西。呼叫給定電話號(hào)的ACTION_ CALL意圖則有所不同,它需要使用稱為Data的參數(shù)。這個(gè)參數(shù)指向一個(gè)URI,而該URI又指向給定電話號(hào)。意圖的行動(dòng)部分是一個(gè)字符串或一個(gè)串常數(shù),該常數(shù)通常用Java包名作前綴;而數(shù)據(jù)部分總是表示URI的字符串。而該URI的格式對(duì)于行動(dòng)激活的每個(gè)活動(dòng)都是專有的。譬如,CALL行動(dòng)決定應(yīng)當(dāng)使用哪種URI數(shù)據(jù),并從該URI提取電話號(hào)。5.2 Android意圖(Intent)5.2.3 意圖和額外信息除去行動(dòng)和數(shù)據(jù)等主要屬性之外,意圖(Intent)還可以包含附加屬性extra(即額外部分)。extra可給接收意圖的組件提供更多的信息。e
10、xtra數(shù)據(jù)的形式為“關(guān)鍵字/值”(key/value)對(duì)。關(guān)鍵字的名字應(yīng)以包名開(kāi)始,而值的名字可以是基本數(shù)據(jù)類型或名字與所實(shí)現(xiàn)的android, os. Parcelable接口一樣長(zhǎng)的對(duì)象。這個(gè)extra信息用Android的android. os. Bundle類來(lái)表示。Intent類用下述兩個(gè)方法對(duì)extra Bundle進(jìn)行訪問(wèn):5.2 Android意圖(Intent)5.2.4 利用組件直接激活活動(dòng)我們已經(jīng)看到,用意圖來(lái)啟動(dòng)活動(dòng)的辦法有兩種:由顯式行動(dòng)來(lái)啟動(dòng)活動(dòng)和借助URI數(shù)據(jù)由通用行動(dòng)啟動(dòng)活動(dòng)。此外,Android還提供了更直接的辦法來(lái)啟動(dòng)活動(dòng):即指定活動(dòng)的ComponentN
11、ame,它是關(guān)于對(duì)象的包名和類名的一種抽象。對(duì)于Intent類來(lái)說(shuō),它的許多方法都能夠用來(lái)指定組件:5.2 Android意圖(Intent)5.2.5 意圖的類屬為了便于用該類名來(lái)查找活動(dòng),Android把活動(dòng)分成了類屬(Category)。例如,啟動(dòng)Android時(shí)需查找類屬為CATEGORY_ LAUNCHER的那些活動(dòng)。然后取得該活動(dòng)名和圖標(biāo),并顯示在啟動(dòng)的主屏幕上(即一系列應(yīng)用程序圖標(biāo))。又譬如Android啟動(dòng)時(shí)查找標(biāo)記為CATEGORY_ HOME的活動(dòng)來(lái)顯示主屏。類似地,類屬CATEGORYGADGET把活動(dòng)標(biāo)記為適合于在另一個(gè)活動(dòng)內(nèi)嵌人或重用。一般地說(shuō),字符串為L(zhǎng)AUNCHE
12、R的類屬定義格式遵從下述約定:5.2 Android意圖(Intent)5.2.5 意圖的類屬5.2 Android意圖(Intent)5.2.6 意圖解析的規(guī)則在活動(dòng)層次的頂部是附加到意圖上的意圖名。如果它已經(jīng)設(shè)置,則該意圖的屬性忽略不計(jì),并選擇該意圖準(zhǔn)備執(zhí)行。然后,Android查看意圖的行動(dòng)屬性。如果該意圖指明一個(gè)行動(dòng),則目標(biāo)活動(dòng)必須將該行動(dòng)列為意圖過(guò)濾器的一部分;如果沒(méi)有指定其他屬性,則Android激活這個(gè)活動(dòng)。如果存在著多個(gè)活動(dòng),Android將顯示活動(dòng)選擇器(chooser)o接著,Android查看意圖的數(shù)據(jù)部分。如果意圖指定了數(shù)據(jù)URI,但沒(méi)有提供類型,則通過(guò)ContentP
13、rovider. getType)從URI檢索該類型。目標(biāo)活動(dòng)必須通過(guò)意圖過(guò)濾器指明它能夠處理這種類型的數(shù)據(jù)。如果數(shù)據(jù)URI不是內(nèi)容URI或未指定數(shù)據(jù)類型,就需要考慮URI的模式。接著目標(biāo)活動(dòng)應(yīng)當(dāng)表明它可以處理這種模式類型的URI。然后Android then查看類屬,Android只選取匹配該類屬的活動(dòng)。最后,如果指定了意圖的類屬,則目標(biāo)活動(dòng)應(yīng)當(dāng)在其過(guò)濾器內(nèi)聲明該類屬。5.2 Android意圖(Intent)5.2.7 運(yùn)用ACRION_PICK要用表示Android內(nèi)容游標(biāo)的MIME類型中選擇多個(gè)項(xiàng)目,需要說(shuō)明項(xiàng)目集合。這個(gè)URI的實(shí)際MIME類型與下面給出的類似:vnd. androi
14、d. cursor. dir/vnd. google. note活動(dòng)的職責(zé)是根據(jù)URI從內(nèi)容提供者檢索數(shù)據(jù)。這也是把數(shù)據(jù)封裝在內(nèi)容提供者內(nèi)的原因,只要這種封裝是可能的。對(duì)于返回這種數(shù)據(jù)的所有行動(dòng)都不能使用startActivity ( ),因?yàn)閟tartActivity( )不返回結(jié)果。5.2 Android意圖(Intent)5.2.8 GET_CONTENT行動(dòng)ACTION_ GET_ CONTENT類似于ACTION_ PICK。在ACTION_ PICK情況下,我們指定的是表示項(xiàng)目集合的URI,如notes集合。預(yù)期這個(gè)行動(dòng)會(huì)獲取notes之一,并返回給調(diào)用者。對(duì)于ACTION_ GET_ CONTENT,我們向Android指明需要一個(gè)具體的MIME類型項(xiàng)目。Android搜索可創(chuàng)建這些項(xiàng)目之一的活動(dòng),或搜索可從滿足MIME類型的現(xiàn)有項(xiàng)目集合中進(jìn)行選擇的活動(dòng)。5.3 本章小結(jié)本章主要介紹內(nèi)容提供者android. provider, android. content和與之密切相關(guān)的意圖類。其中android. provider包是內(nèi)部提供者,它是預(yù)制數(shù)據(jù)庫(kù)的封裝。而android.content包包含3個(gè)重要的類,Content. Provider, ContentResolver和Intent。它們可從包內(nèi)和
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.2《密度》說(shuō)課稿 2025年初中人教版八年級(jí)物理上冊(cè)
- 2025年黨章黨史國(guó)史國(guó)情知識(shí)競(jìng)賽題庫(kù)及答案(共170題)
- 裝修人工費(fèi)報(bào)價(jià)及結(jié)算合同
- 個(gè)人品牌打造與傳播手冊(cè)
- 深基坑工程專項(xiàng)施工方案
- 購(gòu)買設(shè)備可行性研究報(bào)告
- 建筑垃圾再生利用項(xiàng)目可行性研究報(bào)告
- 健身行業(yè)運(yùn)營(yíng)管理策略手冊(cè)
- 2025年度北京市智能家居與暖通裝潢合同
- 商業(yè)秘密保護(hù)措施與合規(guī)性分析
- 2025年日語(yǔ)n2考前試題及答案
- 2025年山西同文職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)帶答案
- 防洪防澇知識(shí)培訓(xùn)課件
- 2025年安徽衛(wèi)生健康職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)審定版
- 2025年01月中國(guó)疾控中心信息中心公開(kāi)招聘1人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 安徽2025年安徽汽車職業(yè)技術(shù)學(xué)院教職工校園招聘筆試歷年參考題庫(kù)附帶答案詳解
- 臨床基于高級(jí)健康評(píng)估的高血壓Ⅲ級(jí)合并腦梗死患者康復(fù)個(gè)案護(hù)理
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 第5課《小心“馬路殺手”》課件
- 2023年06月上海市浦東新區(qū)臨港新片區(qū)文員招考聘用筆試題庫(kù)含答案解析
- 藥品企業(yè)(制藥廠)全套安全生產(chǎn)管理制度
評(píng)論
0/150
提交評(píng)論