




免費預覽已結束,剩余175頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
android 開發(fā)技術培訓 沈大海 android 的歷史 20032004200520062007200820092010 2 android and oha (open handset alliance) google與2007年11月5日宣布組建的一個全球性的聯(lián)盟組織。 聯(lián)盟成員將支持盟主google 發(fā)布的android 手機操作系統(tǒng)或者應用軟件, 共同開發(fā)名為android 的開放源代碼的移動系統(tǒng)。共同對抗 symbian, windows mobile, iphone等系統(tǒng)。 3 android oha 生態(tài)系統(tǒng) 4 android 市場份額 5 android kernel version android based on generic linux 2.6 kernel android 1.0 based on linux2.6.25 android 1.5(cupcake) based on linux2.6.27 android 1.6(donut) based on linux2.6.29 android 2.0/2.1(clair) based on linux2.6.29 android 2.2(froyo) based on linux 2.6.32 android 2.3(gingerbread) based on linux 2.6.35 android 3.0(honeycomb) based on linux 2.6.36 android special drivers: ashmem logger binder android power management low memory killer and android pmem android release history 2008 q2q3q4q1 2009 q2q3q4q1 2010 q2q3q4q1 2011 q2q3q4q1 android 1.0 (sept 2008) android 1.1 (feb 2009) android 1.5 cupcake (april 2009) android 1.6 donut (sept 2009) android 2.0/2.1 eclair (oct 2009) android 2.2 froyo (may 2010) android 2.3 gingerbread (dec 2010) android 3.0 honeycomb (feb 2011) android 3.x ice cream sandwich (oct/nov 2011?) release date not yet announced android release cycles range from 1 to 9 months. android framework architecture 9 android體系結構 應用程序(applications):依據user的期望而將af的組件及 libaraies組件組合而成的高階服務。 應用框架(application framework, 簡稱af):這是結合 applications與libraries的幕后主架構,讓libraries組件能不斷地為 applications所重復使用(reuse)。 豐富而又可擴展的視圖(views) 內容提供器(content providers) 資源管理器(resource manager) 通知管理器 (notification manager) 活動管理器( activity manager) libraries:android里已經提供的c/c+庫存組件(或稱模塊)。例如 ,sqlite數據庫系統(tǒng)、opengl 3d繪圖系統(tǒng)等。 android runtime:java語言層級的virtual machine。 linux核心:android依賴linux 2.6來提供核心的服務,例如內存管 理、進程(process)管理、執(zhí)行緒(thread)管理等。 10 android層次-kernel android基于linux 2.6提供核心系統(tǒng)服務,例如:安全、內存管 理、進程管理、網絡堆棧、驅動模型。linux kernel也作為硬件 和軟件之間的抽象層,它隱藏具體硬件細節(jié)而為上層提供統(tǒng)一 的服務。 使用binder作為進程間通訊機制,取代傳統(tǒng)進程間通訊機制 11 android hardware abstraction layer 用戶空間的c/c+庫 遵循apache協(xié)議 定義android需要linux driver實現(xiàn)的接口 將android徹底和硬件抽象出來 12 android層次結構-android runtime android包含一個核心庫的集合,提供大部分在java編程語言核心類庫中可用 的功能。 dalvik虛擬機則是基于寄存器的,而非大多數 虛擬機所采用的基于棧的實現(xiàn) dalvik虛擬機依賴于linux 內核提供基本功能, 如線程和底層內存管理。 13 android包含一個c/c+庫的集合,供android系統(tǒng)的各個組件使用。這些功 能通過android的應用程序框架(application framework)暴露給開發(fā)者。下 面列出一些核心庫: 系統(tǒng)c庫 多媒體庫:opencore 界面管理 libwebcore sgl 3d庫 freetype sqlite android層次結構-libraries 14 android層次結構application framework 通過提供開放的開發(fā)平臺,android使開發(fā)者能夠編制極其豐富和新穎的應用程序。 開發(fā)者可以自由地利用設備硬件優(yōu)勢、訪問位置信息、運行后臺服務、設置鬧鐘、向 狀態(tài)欄添加通知等等,很多很多。 開發(fā)者可以完全使用核心應用程序所使用的框架apis。應用程序的體系結構旨在簡化 組件的重用,任何應用程序都能發(fā)布他的功能且任何其他應用程序可以使用這些功能 (需要服從框架執(zhí)行的安全限制)。這一機制允許用戶替換組件。 所有的應用程序其 實是一組服務和系統(tǒng),包括: view activitymanager contentprovider notificationmanager 15 android層次結構applications android魅力的終極體現(xiàn): 對用戶:良好的用戶體驗,強大的用戶親和力 對開發(fā)者:快速而靈活的開發(fā)平臺,讓開發(fā)者的靈感能快速轉化為產品 16 android processes android applications android apk build and packaging android application unpackaging and run 三種開發(fā)形式 sdk開發(fā) windows linux mac ndk開發(fā) windows linux 源碼開發(fā) (完全源代碼,linux中開發(fā)) linux操作系統(tǒng)知識 linux內核知識(c語言) linux驅動程序知識(c語言) android底層庫(c語言、c+) dalvik虛擬機(c+、java) android gui系統(tǒng)(c+、java) 音頻、視頻和多媒體(c語言、c+、java) 電話部分的(c語言、c+、java) 連接部分(c語言、c+、java) 傳感器部分(c語言、c+、java) android源碼開發(fā)知識結構: android應用開發(fā)知識結構: java語言知識 應用程序架構 gui設計基礎知識 各種視圖的使用 2d/3d圖形api 應用程序的設計思想 androidndk開發(fā)知識結構: java語言知識 應用程序架構 jni技術 linux下c編程 android debug tools adb (android debug bridge) dmtracedump emulator logcat mksdcard monkey sqlite3 eclips gdb /gdbserver 搭建開發(fā)環(huán)境eclipse/adt 下載并安裝eclipse:/downloads/ 下載sdk安裝包: /sdk/api/sdk/index.html 安裝adt: 1 啟動eclipse-help-install new softwares 2 在”work with”中輸入一個任意名字 3 將/android/eclipse/ 添加到網址欄,點擊”add”按鈕 4 在”work with”的下拉列表中選定剛剛添加的item,在詳細信息框中會有選擇 列表,推薦全部安裝,將開始在線安裝過程 31 搭建開發(fā)環(huán)境eclipse/adt 32 搭建開發(fā)環(huán)境安裝sdk 點擊window-android sdk and avd manager-available packages, 安裝需要的sdk創(chuàng)建一個新的avd 1 通過window-android sdk and avd manager-virtual devices-new 2 通過命令行創(chuàng)建: 開始-運行-cmd-android create avd n avd-name t 6(創(chuàng)建2.0的) 默認創(chuàng)建的路徑是c:documents and settingsuser-name.androidavd 33 生成一個新的工程 用eclipse創(chuàng)建一個新的android應用: file-new-android project 在彈出的提示對話框中所有填寫所有項目: 項目名稱 所使用sdk版本 應用程序名稱 包名 34 35 運行第一個helloandroid 36 從helloandroid分析android應用的要素 androidmanifest.xml res-所有的資源 drawable-圖片文件 layout-布局文件 values-字符串以及屬性定義文件 src-代碼目錄 37 目錄的組織 anim/ drawable/ layout/ values/ xml/ raw/ 1)anim目錄錄下存放著描述animation類型的xml文件。 2) drawable目錄該目錄下存放著.png,.jpg等圖片文件。 3) layout目錄下存放著屏幕ui的layout文件,格式為xml。 4)values目錄下可以存放多種資源類型的xml文件,例如定義 了數組的array.xml,定義了顏色的colors.xml,定義了 dimension的dimnes.xml,定義了字符串的strings.xml,定義 了style的styles.xml。 5)xml目錄存放了用戶自定義的xml文件。 6) raw目錄可存放了用戶的原始數據文件,如聲音文件等, 這些文件在編譯應用程序過程中不被編譯,直接加到apk文 件中。 38 aapt打包示意圖 39 限定符的類型和有效的值 限定符有效值 語言語言碼,遵循iso 639-1標準,小寫,如en, zh. 地區(qū)遵循iso 3166-1-alpha-2標準,大寫,前面加小寫的 “r”,例如:rus,rcn 屏幕朝向port, land, square 屏幕像素密度92dpi, 108dpi等 觸摸屏類型notouch, stylus, finger 鍵盤是否可用keysexposed, keyshidden 首選的輸入法nokeys, qwerty, 12key 首選非觸摸導航方法nonav, dpad, trackball, wheel 屏幕尺寸320x240, 640x480等,大尺寸必須在前 40 資源管理框架 41 android應用的要素androidmanifest androidmanifext的作用:描述了程序包的全局變量, 包括暴露的應用組件(activities, services等等) 和為每個組件的實現(xiàn)類, 什么樣的數據可以操作, 以及在什么地方運行 42 androidmanifest的主要元素 幾乎所有的androidmanifest.xml(以及許多其他android的xml的文件) 在第一個元素中包含了命名空間的聲明xmlns:android=“ /apk/res/android“。這樣使得android中各種標準 屬性能在文件中使用,提供了大部分元素中的數據。 包名(package):指定本應用內java主程序包的包名。當沒有指定apk的文件名 時,編譯后產生程序包將以此命名。本包名應當在android系統(tǒng)運行時唯一。 application:application是android應用內最高級別(top level)的模塊,每個應用 內最多只能有一個application,如果應用沒有指定該模塊,一個默認的 application將被啟用。application將在應用啟動時最先被加載,并存活在應用 的整個運行時生命周期。因此一些初始化的工作適合在本模塊完成. application元素有許多屬性,其中:“persistent”表示本應用是否為常駐內存, “enable”表示本應用當前是否應當被加載。 43 android-activity 1.創(chuàng)建activity xxxactivity extends activity. 2.配置androidmanifest.xml文件 launchmode: standard:每次啟動新的活動窗口(new操作) singletop:如果在棧頂是目標活動,則直接打開.否則開啟新的活動窗口 (new). singletask:同一任務內不再實例化,不同任務需要實例化. singleinstance:不論是否是同一任務,只要打開就共享. androidmanifest的主要元素 activity:activity是application模塊的運行時子元素,標識了一個ui。除了 application,一個應用可以聲明并實現(xiàn)零至多個其它運行時模塊,activity 也同樣。activity也包含了許多定義它工作狀態(tài)的屬性,其中:“name”是必 須的,它指定了該activity所在的文件名,如果該文件所屬包不同于該應用 的包名(即本描述文件的最開始處),那么名字前面需要加入所在包名。 activity通過增加intent-fliter來標識哪些intent可以被處理,同時intent也是 調度activity的主要參數。 service:service也是application的運行時子元素。service屬于后臺模塊, 啟動后將長時間運行,除非停止該service或所在應用進程被殺死 45 android應用組成元素layout android 的ui 布局都以layout 作為容器,在上面按照規(guī)定排列控件,這方 面跟java 的swing 和lwuit 很像。控件跟layout 有很多屬性是一樣的, 可以在properties 里面修改,跟.net/delphi 等rad 類似,其中最常用的 屬性有以下這些: id=“+id/edtinput”,id 是連接ui 與代碼的橋梁 layout_width=“fill_parent“ ,自動填充至屏幕寬度,layout_height 同理 常用的layout有: linearlayout relativelayout framelayout absolutelayout adapterview 46 android應用四大組件簡介 lactivity lservice lcontentprovider lbroadcastreceiver 47 activity簡介 l展現(xiàn)為一個用戶可視化界面 lactivity可以多種形式呈現(xiàn),如全屏模式,對話框模式,透明模式等 lactivity的部分重要屬性: landroid:label=“string resource“ landroid:icon=“drawable resource“ landroid:launchmode=“multiple“ | “singletop“ |“singletask“ | “singleinstance“ 48 activity的四個狀態(tài) 1.active/runing一個新 activity 啟動入棧后,它在屏 幕最前端,處于棧的最頂端,此時它處于可見并可和用戶交互 的激活狀態(tài)。 2. paused 當 activity 被另一個透明或者 dialog 樣式的 activity 覆蓋時的狀態(tài)。此時它依然與窗口管理器保持連接, 系統(tǒng)繼續(xù)維護其內部狀態(tài),所以它仍然可見,但它已經失 去了焦點故不可與用戶交互。 3. stoped 當 activity 被另外一個 activity 覆蓋、失去焦點并不可見時處于 stoped狀態(tài)。 4. killed activity 被系統(tǒng)殺死回收或者沒有被啟動時處于 killed狀態(tài)。 49 activity的各個回調函數與狀態(tài) 之間的關系 l protected void oncreate(bundle savedinstancestate); l protected void onstart(); l protected void onresume(); l protected void onpause(); l protected void onstop(); l protected void ondestroy(); 50 android-應用程序的響應性 在android中,應用的響應性被活動管理器(activity manager)和窗口管理器 (window manager(這兩個系統(tǒng)服務所監(jiān)視. 當用戶觸發(fā)了輸入事件(如鍵盤輸入,點擊按鈕等), 如果應用5秒內沒有響應用戶的輸入事件,那么,android會 認 為該應用無響應,便彈出anr(application no response) 對話框,如右圖. 在正常情況下,android程序會在一條單線程里運行.如果 activity要處理一件比較耗時的工作,應 該交給子線程完成,否側會因為主線程被阻塞,后面的用戶 輸入事件因沒能在5秒內響應,導致應用出現(xiàn) anr對話框. service簡 介 是什么: service在android中是一種長生命周期的組件,它不實現(xiàn) 任何用戶界面 用來做什么: 實現(xiàn)不需要用戶界面但是需要一直運行的功能,如:音樂播放器 怎么用: 實現(xiàn)一個自己的service 啟動執(zhí)行:context.startservice()/context.bindservice() 52 contentprovider簡介 lcontentprovider是android提供的一種標準的共享數據的機制, l應用程序可以通過content provider訪問其它應用程序的一些私有數據 lcontentprovider的優(yōu)點:屏蔽了內部數據的存儲細節(jié),向外提供 l了上述統(tǒng)一的接口模型 53 broadcastreceiver簡介 lbroadcastreceiver的作用:每個broadcast receiver都可以接收 一種或若干種intent作為觸發(fā)事件 lbroadcastreceiver不執(zhí)行任何任務,僅僅是接受并響應廣播 通知的一類組件。 lbroadcastreceiver 不包含任何用戶界面 54 基礎ui menu:如何打造友好的菜單 listview:用好列表,做好程序 dialog:人機友好互動交流 toast和notification:溫馨的提醒 55 android的菜單menu menu 負責管理menuitem 添加一個menuitem add (int groupid, int itemid, int order, charsequence title) 刪除所有的menuitem clear() menuitem 一個菜單的條目 常用的方法: settitle seticon getitemid() 56 android的菜單menu 1.) 通過代碼創(chuàng)建menu public boolean oncreateoptionsmenu(menu menu) / 分組id,item的id,順序,名字 menu.add(0, m_fback, 0, “反饋“) .setalphabeticshortcut(f); menu.add(0, m_help, 1, “幫助“) .setalphabeticshortcut(h) .seticon(android.r.drawable.ic_menu_help); return true; 57 android的菜單menu 2.) 通過xml創(chuàng)建menu 在android工程的res/目錄下新增一個menu/子目錄,然后建立 option_menu.xml文件 oncreateoptionsmenu()方法里通過menuinflater類引入定義好的菜單文件 58 option_menu.xml文件 option_menu.xml文件 59 public boolean oncreateoptionsmenu(menu menu) menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.option_menu, menu); return true; 60 61 android 的對話框 dialog 生成alertdialog三步走 生成一個alertdialog的構造者 alertdialog.builder alertdialog.builder builder = new alertdialog.builder(context); 設置屬性,包括標題、按鈕和圖標 builder.seticon(); builder.settitle(); builder.setpositivebutton(); builder.setnegativebutton(); 最后生成alertdialog builder.create(); 62 提醒 toast toast是android提供的輕量級的提醒機制 toast永遠不會獲得聚焦不會打斷用戶當前的操作 信息在floating view呈現(xiàn),然后會自動消失 63 如何創(chuàng)建toast 1.)簡單文字信息 通過make()方法創(chuàng)建toast信息 調用show()方法來顯示toast提示信息 2.)復雜toast信息 toast支持通過setview(view)添加view組件 64 android ui組件 65 常用ui組件 66 自動文本和選擇組件 67 日期和時間選擇器 68 girdview gallery imageswitcher 69 ratingbar progressbar 70 activity之間的跳轉 intent intent = new intent(); intent.setclass(mainactivity.this, spinneractivity.class); startactivity(intent); 71 intent 72 73 74 action 75 data 76 category 77 78 79 80 81 編寫電話撥號程序 if(phonenumberutils.isglobalphonenumber(t01.gettext().tostring() intent t=new intent(intent.action_call, uri.parse(“tel:/“+t01.gettext().tostring(); calltel.this.startactivity(t); else toast.maketext(calltel.this, “呼叫電話錯誤“, toast.length_long).show(); 82 83 android 系統(tǒng)標準action 84 intent 跟pendingintent 間的聯(lián)系 intent英文意思是意圖,pending表示即將發(fā)生或來臨的事情。 pendingintent這個類用于處理即將發(fā)生的事情。比如在通知 notification中用于跳轉頁面,但不是馬上跳轉。 intent 是及時啟動,intent 隨所在的activity 消失而消失。 pendingintent 可以看作是對intent的包裝,通常通過 getactivity,getbroadcast ,getservice來得到pendingintent的實例, 當前activity并不能馬上啟動它所包含的intent,而是在外部執(zhí)行 pendingintent時,調用intent的。正由于pendingintent中 保存有當前 app的context,使它賦予外部app一種能力,使得外部app可以如同 當前app一樣的執(zhí)行pendingintent里的 intent, 就算在執(zhí)行時當前 app已經不存在了,也能通過存在pendingintent里的context照樣執(zhí) 行intent。另外還可以處理 85 intent 跟pendingintent 間的聯(lián)系 intent執(zhí)行后的操作。常和alermanger 和 notificationmanager一起使用。 intent一般是用作activity、sercvice、 broadcastreceiver之間傳遞數據,而 pendingintent,一般用在 notification上, 可以理解為延遲執(zhí)行的intent, pendingintent是對intent一個包裝。 86 broadcastreceiver broadcastreceiver的作用 broadcastreceiver的類別 broadcastreceiver的工作流程 87 broadcastreceiver 的作用 作用:接收由 sendbroadcast()或者 sendorderedbroadcast 發(fā)送的intent 88 broadcastreceiver的類別 l sendbroadcast : 稱為normal broadcast,所有關注該消息的 receiver,都有機會獲得并進行處理 l sendorderedbroadcast 稱作ordered broadcasts,顧名思義,接受者需 要按資排輩,排在后面的只能吃前面吃剩下的, 前面的心情不好私吞了,后面的只能喝西北風了 (有可能拿不到)。 89 android系統(tǒng)標準broadcast 90 service service 的定義 如何使用service service 的生命周期 91 service 的定義 運行在后臺 可以活在自己進程或者其他應用程序的上下文 (context)里面 默認情況下仍然是活在主線程的,所以耗時操作 要起線程來處理 92 如何使用service 通過context.startservice()啟動, ontext.stopservice 結束: (1)生成-開始(oncreate-onstart) 過程 (2)service停止的時候進入(ondestroy) 過程 (3)如果調用者退出不調用stopservie,服務還會活著 93 如何使用service 通過context.bindservice啟動 (1)只運行oncreate,調用context.unbindservice()結束 (2) 可以通過serviceconnection訪問service (3)調用者退出,service則調用onunbind (4)可以實現(xiàn)ipc 94 service 的生命周期 調用startservice的生命周期為:oncreate onstart( 可多次調用) ondestroy 調用bindservice的生命周期為:oncreate onbind( 只一次,不可多次綁定) onunbind ondestory 95 service 的生命周期 96 文件操作 preferences sqlite庫存儲 網絡 content provider android中的數據保存 97 文件操作 openfileinput openfileoutput 讀取資源文件 getresource().openrawresource(r.raw.xxx) 98 preferences 輕量級的 保存的是原始數據類型 常用于保存程序配置信息 sharedpreferences settings = getsharedpreferences(setting_infos, 0); string name = settings.getstring(name, “); string password = settings.getstring(password, “); 99 過context.getsharedpreferences()得到一個 sharedpreferences。 獲取一個editor,對保存的參數進行編輯: commit(),進行提交。 sharedpreferences settings = getsharedpreferences(“info”, 0); editor editor = settings.edit(); editor.putstring(“name”, nameedittext.gettext().tostring() .putstring(“pwd”, passwordedittext.gettext().tostring() .commit(); 100 android-使用嵌入式sqlite android平臺上集成的一個嵌入式關系型數據庫,sqlite3支持 null,integer,real(浮點數字),text(字符串文本)和blob( 二進制對象)數據類型,雖然它支持的類型只有五種,但實際上 sqlite3也接受varchar(n),char(n),decimal(p,s) 等數據 類型,只不過在運算或保存時會轉成對應的五種數據類型. sqlite最大的特點是你可以把各種類型的數據保存到任何字段中,而 不用關心字段聲明的數據類型是什么. 但定義為integer primary key的字段只能存儲64位整數, 當向這種字段保存除整 數以外 的數據時,將會產生錯誤.另外, sqlite在解析create table語句 時,會忽略字段名后面的數據類型信息. sqlite可以解析大部分標準sql語句,如: 查詢語句:select * from where group by having . order by 排序子句 sqlite分頁同mysql相同: . limit 5 offset 3 | limit 3,5 101 android-使用嵌入式sqlite 首次使用數據庫需要創(chuàng)建表及初始化一些信息,升級時需要修改表信 ,android提供了抽象類sqliteopenhelper完成此類功能. oncreate(sqlitedatabase db)方法用于首次使用時創(chuàng)建庫, onupgrade(sqlitedatabase db, int oldversion, int ewversion)方法檢測版本發(fā)生變化時更新庫. getwritabledatabase()和getreadabledatabase()方法均獲 取一個用于操作數據庫的sqlitedatabase實例. getwritabledatabase()方法以讀寫方式打開數據庫,一旦數據庫 的磁盤空間滿了,數據庫就只能讀而不能寫.倘若使用 getwritabledatabase()打開數據庫就會出錯 .getreadabledatabase()方法先以讀寫方式打開數據庫,如果 數據庫的磁盤空間滿了,就會打開失敗,當打開失敗后會繼續(xù)嘗試以 只讀方式打開數據庫. 102 android-使用嵌入式sqlite public class databasehelper extends sqliteopenhelper private static final string name = “l(fā)g“; /數據庫名稱 private static final int version = 1; /數據庫版本 public databasehelper(context context) super(context, name, null, version); public void oncreate(sqlitedatabase db) db.execsql(“create table if not exists person (personid integer primary key autoincrement, name varchar(20), age integer)“); public void onupgrade(sqlitedatabase db,int oldversion,intnewversion) db.execsql(“ alter table person add phone varchar(12) null “); 103 android-使用嵌入式sqlite 使用sqlitedatabase數據庫 sqlitedatabase db = ; db.execsql(“insert into person(name,age) values(?,?)“,new object); db.close(); /查詢操作 cursor cursor = db.rawquery(“select * from person“, null); while (cursor.movetonext() int personid = cursor.getint(0); string name = cursor.getstring(1); int age = cursor.getint(2); cursor.close(); db.close(); sqlitedatabase db = databasehelper.getwritabledatabase(); contentvalues values = new contentvalues(); values.put(“name”, “亞嵌教育“); . long rowid = db.insert(“person“, null, values);/ 104 android-使用嵌入式sqlite /刪除 sqlitedatabase db = databasehelper.getwritabledatabase(); db.delete(“person“, “personid public class xmltest extends androidtestcase public void testsomething() throws throwable log.i(“test“, “this is test 日志“); system.out.println(“ddd“); assert.asserttrue(1 + 1 = 3); android-sqlite3工具使用 cmd cd /tools adb shell #sqlite3 data/data/cn.lg.android/databases/android sqlite.tables | .schemas | .help |.exit(.quit) | select * .nullvalue null/空值數據顯示問題 例:.nullvlaue null .header(s) on|off/是否顯示列頭信息 例:.headers on .mode mode ?table?/指定數據顯示風格 例:.mode column 創(chuàng)建表時,只能用integer類型,不能用int作為主鍵,否則不支持 autoincrement. create table customers(id integer primary key autoincrement,name text); 107 android-sqlite3工具使用 108 android-使用contentprovider 使用內容供應商共享數據. 如果直接訪問磁盤文件(sdcard|file|sqlite數據庫|首選項),需要很多底 層的交互細節(jié),但是用 該種方式,只使用url即可對應用程序進行訪問,并統(tǒng)一了數據訪問方式. public class personcontentprovider extends contentprovider public boolean oncreate() public uri insert(uri uri, contentvalues values) . 109 android-使用contentprovider uri: content:/viders.personprovider/10 scheme:android規(guī)定,必須是content:/ authority:惟一標識該供應商. path:代表操縱的數據. /person /person/10 /person/10/name /將字符串轉換成uri對象 uri uri = uri.parse(“content:/xxxx/person/10“); 110 android-使用contentprovider urimatcher: 使用該類,可以判斷uri如何哪一種模式. /若不匹配,返回urimatcher.no_match urimatcher smatcher = new urimatcher(urimatcher.no_match); /一次添加匹配的模式串,以及匹配后返回的數值. /$authority $path smatcher.adduri(“cn.lg.contentprovider“, “person“, 1); smatcher.adduri(“cn.lg.contentprovider “,“person/#“,2); switch(smatcher.match(uri) case 1: case 2: . /獲取uri后邊id部分的話,可以通過 uri uri = uri.parse(“content:/vider.personprovider/person“) uri resulturi = contenturis.withappendedid(uri, 10);/.person/10 uri.parse(“content:/vider.personprovider/person/10“) long personid = contenturis.parseid(uri); 111 android-使用contentprovider xxxcontentprovider extends contentprovider . /該方法用于返回當前url所代表數據的mime類型.如果操作的數 據屬于集合類型, /那么mime類型字符串應該以vnd.android.cursor.dir/開頭 /如:“vnd.android.cursor.dir/person“. /如果要操作的數據屬于非集合類型數據,那么mime類型字符串應 該以/vnd.android.cursor.item/開頭 /如:vnd.android.cursor.item/person public string gettype(uri uri) . 112 android-使用contentprovider 使用內容解析器(contentresolver): contentresolver resolver = getcontentresolver(); uri uri = uri.parse(“content:/vider.personprovider/person“); contentvalues values = new contentvalues(); values.put(“name“, “l(fā)g“); values.put(“age“, 25); /插入 resolver.insert(uri, values); /查詢 resolver.query(uri, null, null, null, “personid desc“); /更新 resolver.update(updateiduri, updatevalues, null, null); /刪除 resolver.delete(deleteiduri, null, null); 113 android-使用contentprovider 監(jiān)聽contentprovider的數據變化. /供應商中的crud方法完成后需要發(fā)出數據變更的通知,以通知那些感興趣的監(jiān)聽者. xxxcontentprovider extends contentprovider public long insert(.) . getcontext().getcontentresolver().notifychange(uri,null); 內容解析器如若要對數據監(jiān)聽數據變更,需要使用contentobserver對uri進行監(jiān)聽, 收到通知后,回 調處理方法onchange(). context.getcont
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國古代建筑藝術鑒賞:中國建筑史大一課程教案
- JJF(紡織)031-2023圓軌跡法起毛起球儀校準規(guī)范
- 酒水供貨合同協(xié)議(12篇)
- 2025年客戶工作計劃(18篇)
- 2025年初升高暑期數學講義專題08 集合中含有參數問題分層訓練(含答案)
- IBHL數學AA2024-2025學年微積分與高等代數期中考試試題及解析
- 考研復習-風景園林基礎考研試題附參考答案詳解(b卷)
- 風景園林基礎考研資料試題及1套完整答案詳解
- 2025-2026年高校教師資格證之《高等教育法規(guī)》通關題庫附參考答案詳解ab卷
- 2025年江西省高速公路投資集團有限責任公司招聘筆試備考題庫附答案詳解(研優(yōu)卷)
- 《動物解剖學》課件
- 2024屆龍巖市五縣八年級物理第二學期期末考試試題含解析
- 牙齒異位種植體植入后的骨重建研究
- 《活著》讀書分享課件
- 吉林大學物理化學實驗 習題與試卷
- 語文到底教什么
- 口腔牙科商業(yè)計劃書
- 數學的力量:讓我們成為更好的人
- 電子表格表格會計記賬憑證模板
- UPS電源管理系統(tǒng)升級
- 浙江省杭州市上城區(qū)2021-2022學年五年級下學期期末數學試卷
評論
0/150
提交評論