Android應(yīng)用開發(fā)案例教程(AndroidStudio版)課件_第1頁
Android應(yīng)用開發(fā)案例教程(AndroidStudio版)課件_第2頁
Android應(yīng)用開發(fā)案例教程(AndroidStudio版)課件_第3頁
Android應(yīng)用開發(fā)案例教程(AndroidStudio版)課件_第4頁
Android應(yīng)用開發(fā)案例教程(AndroidStudio版)課件_第5頁
已閱讀5頁,還剩275頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Android應(yīng)用開發(fā)案例教程 (Android Studio版) 第1頁,共280頁。contents010302040506Android UI設(shè)計圖像和動畫數(shù)據(jù)存儲廣播Broadcast與服務(wù)Service媒體播放與錄制Activity與多個用戶界面目 錄07網(wǎng)絡(luò)編程技術(shù)第2頁,共280頁。第3頁,共280頁。Android發(fā)展史2003年10月,Andy Rubin等人創(chuàng)建Android公司,并組建Android團(tuán)隊(duì)2005年8月17日,Google低調(diào)收購了成立僅22個月的高科技企業(yè)Android及其團(tuán)隊(duì)。安迪魯賓成為Google公司工程部副總裁,繼續(xù)負(fù)責(zé)Android項(xiàng)目。第4頁,

2、共280頁。Android發(fā)展史2007年11月5日,谷歌公司正式向外界展示了這款名為Android的操作系統(tǒng),并且在這天谷歌宣布建立一個全球性的聯(lián)盟組織,該組織由34家手機(jī)制造商、軟件開發(fā)商、電信運(yùn)營商以及芯片制造商共同組成,并與84家硬件制造商、軟件開發(fā)商及電信營運(yùn)商組成開放手持設(shè)備聯(lián)盟(Open Handset Alliance)來共同研發(fā)改良Android系統(tǒng),這一聯(lián)盟將支持谷歌發(fā)布的手機(jī)操作系統(tǒng)以及應(yīng)用軟件。Google以Apache免費(fèi)開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第5頁,共280頁。什么是Android?第6頁,共280頁。Android發(fā)展史2008年,在

3、GoogleI/O大會上,谷歌提出了AndroidHAL架構(gòu)圖,在同年8月18號,Android獲得了美國聯(lián)邦通信委員會(FCC)的批準(zhǔn),在2008年9月,谷歌正式發(fā)布了Android 1.0系統(tǒng),這也是Android系統(tǒng)最早的版本。2009年4月,谷歌正式推出了Android 1.5這款手機(jī),從Android 1.5版本開始,谷歌開始將Android的版本以甜品的名字命名,Android 1.5命名為Cupcake(紙杯蛋糕)。該系統(tǒng)與Android 1.0相比有了很大的改進(jìn)。第7頁,共280頁。Android發(fā)展史2010年10月份,谷歌宣布Android系統(tǒng)達(dá)到了第一個里程碑,即電子市場

4、上獲得官方數(shù)字認(rèn)證的Android應(yīng)用數(shù)量已經(jīng)達(dá)到了10萬個,Android系統(tǒng)的應(yīng)用增長非常迅速。在2010年12月,谷歌正式發(fā)布了Android 2.3操作系統(tǒng)Gingerbread (姜餅)。第8頁,共280頁。Android應(yīng)用程序組成1.Activity2.Intent 3.BroadcastReceiver4.Service5.Content Provider第9頁,共280頁。Activity相當(dāng)于手機(jī)屏幕的一個頁面,上面可以放各種UI組件一個應(yīng)用包含多個ActivityAndroid使用堆棧存放多個Activity對象,并自動進(jìn)行管理Activity存在生命周期第10頁,共28

5、0頁。Intent 和Intent FilterIntent :是一個將要執(zhí)行的操作的抽象描述(Google)。主要用于在不同Activity之間跳轉(zhuǎn),并且傳遞數(shù)據(jù)。主要動作類型:Main、PICK、VIEW、EDIT等,對應(yīng)的數(shù)據(jù)以URI表示。Intent Filter用于描述Activity能夠操作那些Intent對象第11頁,共280頁。BroadcastReceiver主要用于對應(yīng)用的外部事件進(jìn)行響應(yīng)。通過NotificationManager通知用戶事件發(fā)生了。通過在AndroidManifest.xml中定義,或者通過context.RegisterReceiver()注冊。各種應(yīng)

6、用還可以通過Context.sendBroadcast()把自己的Intent Broadcast廣播給其他應(yīng)用。第12頁,共280頁。Service后臺運(yùn)行的應(yīng)用程序。音樂播放器的后臺播放第13頁,共280頁。Content Provider用于在不同應(yīng)用之間交換數(shù)據(jù)一個應(yīng)用通過實(shí)現(xiàn)ContentProvider的抽象接口,從而把自己的數(shù)據(jù)暴露給其他應(yīng)用調(diào)用,而其他應(yīng)用程序無需關(guān)心數(shù)據(jù)的存儲的具體細(xì)節(jié)。第14頁,共280頁。Android UI設(shè)計Chap 01第15頁,共280頁。第一章 目 錄1.1 新建Android項(xiàng)目1.2 Android布局管理1.3 用戶界面組件包1.4 常用組

7、件1.5 列表組件第16頁,共280頁。1.1.1 創(chuàng)建一個新項(xiàng)目 啟動Android Studio, 選擇“Start a new Android Studio project”菜單。 然后在對話框中輸入應(yīng)用程序名稱(Chap01)、包名等參數(shù)。并選擇Android SDK的版本。第17頁,共280頁。1.1.2 Android項(xiàng)目結(jié)構(gòu) 打開Chap01項(xiàng)目,可以看到應(yīng)用項(xiàng)目的目錄和文件結(jié)構(gòu)。app模塊下的文件目錄結(jié)構(gòu):manifests: 項(xiàng)目的配置信息文件。java: 源代碼和測試代碼。res: 資源目錄,存儲項(xiàng)目資源。Gradle Scripts模塊下的文件目錄結(jié)構(gòu)Gradle是一種依

8、賴管理工具基于Groovy的內(nèi)部領(lǐng)域特定(DSL)語言定義12第18頁,共280頁。資源目錄res及其資源類型res目錄用于存放項(xiàng)目所需要的聲音、圖片、用戶界面等資源文件。其中最重要的三個目錄:1. drawable目錄存放圖標(biāo)資源2. layout目錄存放用戶界面布局文件。3. values目錄存放參數(shù)描述文件資源,都是XML文件,如字符串string.xml、顏色color.xml、 數(shù)組arrays.xml等。3res目錄結(jié)構(gòu)第19頁,共280頁。1.1.3 res資源引用方法當(dāng)在程序中引用資源時需要使用R類,引用形式:R.資源類型.資源名稱例如,(1)在Activity中顯示布局視圖,

9、setContentView(R.layout.main);(2)程序要獲得布局文件中的圖片組件 ,img = (Image)finadViewById(R.id.img01);(3)程序要獲得布局文件中的列表組件, list= (List)findViewById(R.id.alist);第20頁,共280頁。1.1.4 AndroidManifest.xml項(xiàng)目配置文件每個應(yīng)用程序都需要,它位于應(yīng)用程序根目錄下第21頁,共280頁。1.1.5 Android應(yīng)用程序架構(gòu)分析邏輯控制層與表現(xiàn)層 在Android應(yīng)用程序中,邏輯控制層與表現(xiàn)層是分開的設(shè)計的。邏輯控制層由Java應(yīng)用程序?qū)崿F(xiàn),表

10、現(xiàn)層由XML文檔描述。1邏輯控制層與表現(xiàn)層關(guān)系圖第22頁,共280頁。Activity主程序介紹布局文件與Activity關(guān)聯(lián)是非常重要的一個環(huán)節(jié)。Activity重寫方法onCreate。每個Activity都要進(jìn)行一些必要的初始化。2第23頁,共280頁。1.2 Android布局管理設(shè)計思想:Android系統(tǒng)應(yīng)用程序的設(shè)計模式是采用MVC模式,即把應(yīng)用程序分為表現(xiàn)層(View)、控制層(Control)、業(yè)務(wù)模型層(Model)。按照這種模式,圖形界面布局為表現(xiàn)層,Activity控制程序?yàn)榭刂茖?,將?yīng)用程序的界面設(shè)計與功能控制設(shè)計分離,從而可以單獨(dú)地修改用戶界面。Android 系統(tǒng)

11、的布局管理指的是在XML布局文件中設(shè)置組件的大小、間距、排列及對齊方式等。Android 系統(tǒng)中常見的布局文件有: LinearLayout、FrameLayout、TableLayout、RelativeLayout、GridLayout、ConstraintLayout。第24頁,共280頁。1.2.2 常見的布局方式布局文件可以單獨(dú)創(chuàng)建,創(chuàng)建時需要輸入文件名,文件名的字母必須全部小寫,然后選擇布局類型。新建布局第25頁,共280頁。1 線性布局LinearLayout線性布局LinearLayout將組件按照水平或垂直方向排列。1) 設(shè)置線性布局為水平方向 android:orienta

12、tion = horizontal”2) 設(shè)置線性布局為垂直方向 android:orientation = vertical【例1-1】線性布局應(yīng)用示例設(shè)計一個5個按鈕的線性布局線性布局的控件層級關(guān)系第26頁,共280頁。2 幀布局FrameLayout幀布局FrameLayout是將組件放置到左上角位置,當(dāng)添加多個組件時,后面的組件將遮蓋之前的組件。在XML布局文件中,由根元素FrameLayout來標(biāo)識幀布局?!纠?-2】幀布局應(yīng)用示例將圖像文件復(fù)制到 res/drawable 目錄下布局的控件層級關(guān)系和屬性圖1-11 幀布局示例結(jié)果第27頁,共280頁。3 表格布局TableLayou

13、t表格布局將頁面劃分成行列構(gòu)成的單元格。由根元素TableLayout來標(biāo)識表格布局。行由定義。組件放置到哪一列,由 android:layout_column 指定列編號。三個常用屬性 android:collapseColumns: 設(shè)置需要被隱藏的列序號 android:shrinkColumns: 設(shè)置允許被收縮的列序號 android:stretchColumns: 設(shè)置運(yùn)行被拉伸的列序號設(shè)計一個3行4列的表格布局第28頁,共280頁。4 相對布局RelativeLayout相對布局是采用相對其它組件的位置的布局方式。通過指定ID關(guān)聯(lián)其他組件,與之右對齊、上下對齊等方式來排列組件?!?/p>

14、例1-4】應(yīng)用相對布局設(shè)計一個圖片和4個按鈕,如下圖第29頁,共280頁。5 網(wǎng)絡(luò)布局 GridLayout網(wǎng)格布局是把設(shè)置區(qū)域劃分為若干行和若干列的網(wǎng)格,網(wǎng)格中的一個組件可以占據(jù)多行或多列。布局的屬性可以設(shè)置組件在網(wǎng)絡(luò)中的大小和擺放方式。主要屬性如下: alignmentMode:設(shè)置布局管理器的對齊方式。 columnCount:設(shè)置網(wǎng)格列的數(shù)量。 rowCount:設(shè)置網(wǎng)格行的數(shù)量。 layout_columnSpan:設(shè)置組件占據(jù)的列數(shù)。 layout_rowSpan:設(shè)置組件占據(jù)的行數(shù)。應(yīng)用網(wǎng)格布局設(shè)計一個計算器界面第30頁,共280頁。6 約束布局ConstraintLayoutA

15、ndroid Studio 2.3 版本默認(rèn)的布局是 ConstraintLayout 。在工作區(qū)中有兩種預(yù)覽,一種設(shè)計預(yù)覽,一種叫做藍(lán)圖的東西。兩者可以輔助進(jìn)行布局預(yù)覽。第31頁,共280頁。1.3.1 用戶界面組件包 widgetAndroid 系統(tǒng)為開發(fā)人員提供了豐富多彩的用戶界面組件,大多數(shù)組件在 widget 包。第32頁,共280頁。1.3.2 View 類視圖組件View類,是用戶界面組件的共同父類。幾乎所有的高級UI組件都繼承自View類。例如TextView、Button、List,EditText、RadioButton、Checkbox 等。一個View就是屏幕上一塊矩形

16、區(qū)域,負(fù)責(zé)渲染和上面的事件處理,并可以設(shè)置該區(qū)域是否可見,是否可以獲取焦點(diǎn)等。對于View類及其子類的屬性,可以在布局文件中設(shè)置,也可以在Java文件中動態(tài)設(shè)置。第33頁,共280頁。例1-7 設(shè)計一個文本標(biāo)簽組件程序,有標(biāo)題和正文,而且翻看的文字超過一屏。把大段文字TextView放在一個ScrollView里面,當(dāng)文字內(nèi)容很長的時候,ScrollView自動會顯示滾動條。第34頁,共280頁。values目錄下的strings.xml,添加屬性為”hello”的元素項(xiàng)的文本內(nèi)容。例1-7 strings.xml部分源代碼:青春塞繆爾厄爾曼n中譯:王佐良 n青春不是年華,而是心境;第35頁,

17、共280頁。按鈕Button按鈕Button用于處理人機(jī)交互的事件。按鈕Button是文本標(biāo)簽TextView的子類,繼承了文本標(biāo)簽TextView所有的方法和屬性。事件處理的實(shí)現(xiàn)步驟:關(guān)聯(lián)控件(如按鈕)、設(shè)置控件的事件監(jiān)聽、在監(jiān)聽接口添加事件處理程序。按鈕需設(shè)置OnClickListener監(jiān)聽。當(dāng)單擊按鈕時,通過OnClickListener監(jiān)聽接口觸發(fā)onClick事件,實(shí)現(xiàn)用戶需要的功能。實(shí)現(xiàn)接口時,一定要重寫這個onClick方法。 第36頁,共280頁。 【例1-8】制作登陸界面 第37頁,共280頁。進(jìn)度條 進(jìn)度條ProgressBar能直觀顯示某個操作的進(jìn)度。 進(jìn)度條應(yīng)用示例第

18、38頁,共280頁。單選按鈕與復(fù)選按鈕單選組件RadioGroup用于多項(xiàng)選擇中只允許任選其中一項(xiàng)的情形。單選組件RadioGroup由一組單選按鈕RadioButton組成。復(fù)選按鈕CheckBox用于多項(xiàng)選擇的情形,用戶可以一次性選擇多個選項(xiàng)。復(fù)選按鈕CheckBox是按鈕Button的子類,其屬性與方法繼承于按鈕Button。單選按鈕與復(fù)選框應(yīng)用示例第39頁,共280頁。1.5 列表組件ListView ListView類是Android程序開發(fā)中經(jīng)常用到的組件,該組件必須與適配器配合使用,由適配器提供顯示樣式和顯示數(shù)據(jù)。第40頁,共280頁?!纠?-11】簡單列表示例,效果如圖第41頁

19、,共280頁。AdapterAdapter是連接后端數(shù)據(jù)和前端顯示的適配器接口,是數(shù)據(jù)和UI(View)之間一個重要的紐帶。在常見的ListView、GridView 都需要用到Adapter。Data、Adapter、View三者關(guān)系第42頁,共280頁。Android中所有的Adapter一覽 第43頁,共280頁。常用的AdapterBaseAdapter是一個抽象類,繼承它需要實(shí)現(xiàn)較多的方法,所以也就具有較高的靈活性; ArrayAdapter支持泛型操作,最為簡單,只能展示文字。 SimpleAdapter有最好的擴(kuò)充性,可以自定義出各種效果。 第44頁,共280頁。ArrayAda

20、pter數(shù)組適配器使用ArrayAdapter來裝配數(shù)據(jù),連接ListView 視圖對象和數(shù)組來裝配一批數(shù)據(jù)。ArrayAdapter的構(gòu)造需要3個參數(shù),依次為this、ListItem布局文件(注意是列表每一行的布局)、數(shù)據(jù)源(一個數(shù)組集合)。Android系統(tǒng)內(nèi)置了多種ListItem布局方式。android.R.layout.simple_list_item_1:一行text。android.R.layout.simple_list_item_2:一行title,一行text。用setAdapter()完成適配的最后工作。第45頁,共280頁。示例1-11: ArrayAdapter列表

21、的顯示需要三個元素:ListVeiw,用來展示列表的View。適配器,用來把數(shù)據(jù)映射到ListView上的中介。數(shù)據(jù),具體的將被映射的字符串,圖片,或者基本組件。OnItemClickListener是一個接口, 用于監(jiān)聽列表組件選項(xiàng)的觸發(fā)事件??梢杂?Toast.makeText().show()顯示提示消息。第46頁,共280頁。與列表交互單擊列表某一項(xiàng),就會觸發(fā)一些動作第一種:OnItemClickListener listener1; /單擊Item時調(diào)用第二種:OnItemSelectedListener listener2; /選中Item后調(diào)用第47頁,共280頁。1.5.3使用

22、ListActivity類改寫【例1-11】ListActivity和只包含一個ListView組件的普通Activity沒有太大的區(qū)別,只是實(shí)現(xiàn)了一些封裝而已。對顯示ListView 做了許多優(yōu)化,方便顯示列表信息。ListActivity類繼承于Activity,默認(rèn)綁定了一個ListView組件,并提供一些與ListView處理相關(guān)的操作。常用的方法為getListView(),返回綁定的ListView組件。第48頁,共280頁。1.5.3 使用ListActivity類改寫【例1-11】 布局文件中的ListView組件的id應(yīng)設(shè)置為”id/android:list”第49頁,共28

23、0頁。1.5.4帶圖片的列表: 定制的列表布局 配合定制列表布局的數(shù)據(jù)適配器SimpleAdapter,擴(kuò)展性很好,可以設(shè)置ImageView圖片、Button按鈕、CheckBox復(fù)選框等?!纠?-13】實(shí)現(xiàn)一個帶有圖片的列表信息ListView3Activity.java效果如下:自定義格式的ListView第50頁,共280頁。1.5.5 沒有數(shù)據(jù)的ListView 有時候列表還沒有數(shù)據(jù)可以顯示,需要我們用一句提示的語言來告訴用戶,運(yùn)行效果如下圖:沒有數(shù)據(jù)的ListView第51頁,共280頁。實(shí)戰(zhàn)演練 生肖背后的故事設(shè)計三個布局文件,12生肖放到一個下拉列表框spinner,效果如圖,

24、不限布局類型。這里只要求實(shí)現(xiàn)布局效果。沒有數(shù)據(jù)的ListView圖1-23實(shí)戰(zhàn)演練第52頁,共280頁。THANKS第53頁,共280頁。Android應(yīng)用開發(fā)案例教程 (Android Studio版) 第54頁,共280頁。contents010302040506Android UI設(shè)計圖像和動畫數(shù)據(jù)存儲廣播Broadcast與服務(wù)Service媒體播放與錄制Activity與多個用戶界面目 錄07網(wǎng)絡(luò)編程技術(shù)第55頁,共280頁。 Activity與多個用戶界面Chap 02第56頁,共280頁。第2章 目 錄2.1 什么是Activity 2.2 創(chuàng)建新的Activity 2.3 In

25、tent介紹 2.4 Bundle類及應(yīng)用Intent傳遞數(shù)據(jù)2.5 消息提示類 2.6 對話框2.7 菜單設(shè)計第57頁,共280頁。Android系統(tǒng)自帶了一套核心應(yīng)用程序,應(yīng)用程序包括電話撥號程序、短信程序、日歷、音樂播放器、瀏覽器、聯(lián)系人管理程序等,如圖所示。Activity是Android程序中最基本的組件,顯示可視化的用戶界面,接收與用戶交互所產(chǎn)生的界面事件。一個Activity代表一個單獨(dú)的屏幕,可以添加多個控件,如Button、TextView、EditView等,組成和用戶交互的用戶界面。Android四大組件Activity、Service、BroadcastReceiver

26、、Content Provider。其中最重要的是Activity,它是應(yīng)用程序通過屏幕給用戶提供交互的Android組件。2.1 什么是Activity第58頁,共280頁。2.1 什么是Activity每個Activity都有一個窗口,在上面繪制了程序的用戶界面。這個窗口通常會占滿整個屏幕,但是也可以比屏幕小,或者懸浮在其它窗口上。一個程序一般會由多個Activity結(jié)合在一起。每個Activity為了執(zhí)行不同的行為都能跳轉(zhuǎn)到下一個Activity。Activity是用棧進(jìn)行管理,當(dāng)來到一個新的Activity后,此Activity將被加入到Activity棧頂,之前的Activity位于

27、此Activity底部。第59頁,共280頁。Activity生命周期Activity有四種狀態(tài):運(yùn)行狀態(tài)暫停狀態(tài)停止?fàn)顟B(tài)銷毀狀態(tài)第60頁,共280頁。程序調(diào)試 LogCatLogCat是用來捕獲系統(tǒng)日志信息的工具,它能捕獲包括Dalvik虛擬機(jī)產(chǎn)生的信息、進(jìn)程信息、ActivityManager信息、Android運(yùn)行時信息和應(yīng)用程序信息等。不同類型日志信息級別不一樣,從高到低依次為斷言信息、錯誤信息、警告信息、通告信息、調(diào)試信息和詳細(xì)信息。Log日志信息Log日志類能夠記錄程序運(yùn)行過程中的相關(guān)信息方 法功能描述Log.e()記錄錯誤信息Log.w()記錄警告信息Log.i()記錄一般提示性

28、信息Log.d()記錄調(diào)試信息Log.v()記錄詳細(xì)的信息第61頁,共280頁。程序跟蹤在Android Studio中通過單擊某行代碼左邊的灰色區(qū)域可以在該行設(shè)置一個斷點(diǎn),這樣,當(dāng)使用Debug方式運(yùn)行程序時,程序遇到斷點(diǎn)會暫停下來,通過跟蹤程序運(yùn)行進(jìn)而了解程序中各變量和流程的執(zhí)行情況。第62頁,共280頁。2.1.1 啟動Activity要素Activity在使用之前,需要在AndroidManifest文件中,注冊Activity。使用Android SDK工具創(chuàng)建新的應(yīng)用程序,會自動創(chuàng)建Activity的意圖過濾器,默認(rèn)情況如下:android:name屬性是唯一必須的屬性,它用來指定

29、Activity的類名。節(jié)點(diǎn)用來指定Activity的主入口行為指定了該Activity在應(yīng)用程序中允許用戶啟動這個Activity。 第63頁,共280頁。2.1.2 Activity與布局之間的關(guān)系通常Activity具體顯示什么是由Layout布局文件中設(shè)置的內(nèi)容來決定的。布局文件是用xml語言編寫的,是一種可擴(kuò)展的標(biāo)記語言。例如RelativeLayout標(biāo)簽是相對布局,這個布局中可以放很多控件,這些控件按照相對位置來進(jìn)行擺放。再例如TextView有寬度和高度,文字以及背景顏色等屬性。在Activity的onCreate方法中調(diào)用setContentView()方法來指定Activi

30、ty顯示的內(nèi)容,也就是指定Layout文件。這種分工把設(shè)計用戶界面和編寫Activity代碼這兩件工作很好的劃分開來。123第64頁,共280頁。用戶界面由View類派生的view對象分層次結(jié)構(gòu)提供。每個view都在Activity的窗口中控制了一個特定的矩形的空間,它們能夠接收響應(yīng)用戶的交互操作。在Activity中調(diào)用findViewById()方法可以獲取控件的對象,再通過這個對象去設(shè)置控件的屬性,隨時修改控件的屬性,包括文字內(nèi)容、顏色等,以此來修改和改變 layout 布局。2.1.3 Activity與View之間的關(guān)系view對象findViewById()方法第65頁,共280頁

31、。2.2 創(chuàng)建新的Activity 【例2-1】從Activity啟動另一個Activity示例。第66頁,共280頁。2.3 Intent介紹 在Android系統(tǒng)中,每個應(yīng)用程序通常都由多個界面組成,每個界面就是一個Activity,在這些界面進(jìn)行跳轉(zhuǎn)時,實(shí)際上也就是Activity之間的跳轉(zhuǎn)。跳轉(zhuǎn)需要用到Intent意圖組件,通過Intent可以開啟新的Activity實(shí)現(xiàn)界面跳轉(zhuǎn)。 Intent被稱為意圖,是程序中各組件進(jìn)行交互的一種重要方式,它不僅可以指定當(dāng)前組件要執(zhí)行的動作,還可以在不同組件之間進(jìn)行數(shù)據(jù)傳遞。一般用于啟動Activity、Service以及發(fā)送廣播等(Service

32、和廣播將在后續(xù)章節(jié)講解)。 根據(jù)開啟目標(biāo)組件的方式不同,Intent被分為兩種類型:顯式意圖和隱式意圖。123第67頁,共280頁。2.3.1 顯式意圖顯式意圖可以直接通過名稱開啟指定的目標(biāo)組件,通過其構(gòu)造方法Intent(Context packageContext, Classcls)來實(shí)現(xiàn)。第1個參數(shù)為Context表示當(dāng)前的Activity對象,使用this即可。第2個參數(shù)Class表示要啟動的目標(biāo)Activity。 通過這個方法創(chuàng)建一個Intent對象,然后將該對象傳遞給Activity的startActivity()方法即可啟動目標(biāo)組件。 Intent intent = new I

33、ntent(Activity01.this, Activity02.class); / 創(chuàng)建Intent對象startActivity(intent); / 開啟Activity02 第68頁,共280頁。2.3.2 隱式意圖 隱式意圖相比顯式意圖來說更為抽象,它并沒有明確指定要開啟哪個目標(biāo)組件,而是通過指定action和category等屬性信息,系統(tǒng)根據(jù)這些信息進(jìn)行分析,然后尋找目標(biāo)Activity。其示例代碼如下:Uri uri =Uri.parse();Intent it = new Intent(Intent.ACTION_VIEW,uri);startActivity (it);第

34、69頁,共280頁。2.3.3 Activity之間的跳轉(zhuǎn)Intent組件是Android系統(tǒng)一種運(yùn)行時的綁定機(jī)制, 在Android 的應(yīng)用程序中,不管是頁面切換,還是傳遞數(shù)據(jù)或是調(diào)用外部程序,都可能要用到Intent。Intent的屬性有動作(Action)、數(shù)據(jù)(Data)、分類(Category)、類型(Type)、組件(Compent)以及擴(kuò)展(Extra),其中最常用的是Action屬性。12例如:Intent.ACTION_MAIN:應(yīng)用程序入口。Intent.ACTION_SEND:發(fā)送短信、發(fā)送郵件等。Intent.ACTION_VIEW:顯示數(shù)據(jù)給用戶,如瀏覽網(wǎng)頁、顯示應(yīng)用

35、、尋找應(yīng)用等。Intent.ACTION_WEB_SEARCH:從谷歌搜索內(nèi)容。Intent.ACTION_DIAL:撥打電話。Intent.ACTION_PICK:打開聯(lián)系人列表。第70頁,共280頁。2.4 應(yīng)用Intent傳遞數(shù)據(jù)2.4.1.Bundle類 Bundle類是用于為字符串與某組件對象建立映射關(guān)系的組件。 Bundle組件與Intent配合使用,可在不同的Activity之間傳遞數(shù)據(jù)。 Bundle類的常用方法如下。 (1) putString(String key,String value):把字符串用“鍵值對” 形式存放到Bundle對象中。 (2) remove(Str

36、ing key) :移除指定key的值 (3) getString(String key):獲取指定key的字符。第71頁,共280頁。2.4.2 應(yīng)用Intent在不同的Activity之間傳遞數(shù)據(jù)應(yīng)用Intent在Activity界面之間傳遞數(shù)據(jù) 第72頁,共280頁?!纠?-2】應(yīng)用Intent傳遞數(shù)據(jù)數(shù)據(jù)在不同Activity界面之間傳遞的效果 第73頁,共280頁。2.5 消息提示類Toast用Toast來顯示幫助或提示消息,該提示消息以浮于應(yīng)用程序之上的形式顯示在屏幕上。因?yàn)樗⒉猾@得焦點(diǎn),所以不會影響用戶的其他操作,使用消息提示類(Toast)的目的是盡可能不中斷用戶操作,讓用戶

37、看到提示信息。第74頁,共280頁?!纠?-3】消息提示類Toast示例本案例將實(shí)現(xiàn)按默認(rèn)方式、自定義方式和帶圖標(biāo)方式顯示Toast消息提示的效果。將事先準(zhǔn)備好的圖標(biāo)文件icon.jpg復(fù)制到資源目錄resdrawable下,以做提示消息的圖標(biāo)之用。第75頁,共280頁。2.6 對話框?qū)υ捒蚴且粋€有邊框和標(biāo)題欄的、獨(dú)立存在的容器,在應(yīng)用程序中經(jīng)常使用對話框組件來進(jìn)行人機(jī)交互,用于需要用戶采取行動才能繼續(xù)執(zhí)行的事件。 Android系統(tǒng)常用對話框: AlertDialog:消息對話框; ProgressDialog:進(jìn)度條對話框; DatePickerDialog:日期選擇對話框; TimePi

38、ckerDialog:時間選擇對話框。第76頁,共280頁。2.7 菜單設(shè)計 菜單(Menu)由多個菜單選項(xiàng)組成,選擇一個菜單項(xiàng)就可以引發(fā)一個動作事件。上下文菜單應(yīng)用示例選項(xiàng)菜單應(yīng)用示例第77頁,共280頁。實(shí)戰(zhàn)演練 BMI體質(zhì)指數(shù)計算器開發(fā)一款BMI體質(zhì)指數(shù)計算器,實(shí)現(xiàn)輸入身高和體重即可判斷體型是否正常,體質(zhì)指數(shù)如表所示,界面如圖所示。BMI體質(zhì)指數(shù)計算器第78頁,共280頁。THANKS第79頁,共280頁。Android應(yīng)用開發(fā)案例教程 (Android Studio版) 第80頁,共280頁。contents010302040506Android UI設(shè)計圖像和動畫數(shù)據(jù)存儲廣播Broa

39、dcast與服務(wù)Service媒體播放與錄制Activity與多個用戶界面目 錄07網(wǎng)絡(luò)編程技術(shù)第81頁,共280頁。 多媒體播放與錄制 Chap 03第82頁,共280頁。第3章 目 錄3.1 音頻播放3.2 視頻播放3.3 錄音與拍照第83頁,共280頁。3.1 音頻播放3.1.1 多媒體處理包Android系統(tǒng)提供了針對常見多媒體格式的API,可以非常方便操作圖片、音頻、視頻等多媒體文件,也可以操控Android終端的錄音攝像設(shè)備。這些多媒體處理API均位于android.media包。第84頁,共280頁。3.1.2 媒體播放器 MediaPlayer MediaPlayer是Andr

40、oid系統(tǒng)多媒體android.media包中的類,主要用于控制音頻文件,視頻文件或者流媒體的播放。MediaPlayer對象的生命周期: 通常把一個對象從創(chuàng)建、使用、釋放的過程稱為該對象的生命周期,把MediaPlayer對象的創(chuàng)建、初始化、同步處理、釋放、結(jié)束的運(yùn)行過程稱為MediaPlayer的生命周期。第85頁,共280頁。 MediaPlayer對象的生命周期第86頁,共280頁。res資源中的音樂文件存儲在應(yīng)用程序的res資源中的音樂文件,使用create()方法創(chuàng)建MediaPlayer對象。由于create()方法中已經(jīng)封裝了初始化及同步的方法,故不需要再進(jìn)行setDataSo

41、urce()初始化及prepare()同步操作。案例:MediaPlayer mplayer= MediaPlayer.create(this,R.raw.test);第87頁,共280頁。存放在SD卡的音樂文件存儲在SD卡中的多媒體文件,需要調(diào)用new()方法創(chuàng)建MediaPlayer對象,再調(diào)用setDataSource()方法設(shè)置多媒體數(shù)據(jù)來源。案例:MediaPlayer mplayer = new MediaPlayer();String str=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_

42、DOWNLOADS)+/music.mp3;mplayer.setDataSource(str);mplayer.prepare();第88頁,共280頁。播放要播放音頻文件,則調(diào)用start()方法。例如:mplayer.start();要暫停,則調(diào)用pause()方法。要停止,則調(diào)用stop()方法。釋放占用資源在音頻文件播放結(jié)束時,調(diào)用release()釋放播放器占用的系統(tǒng)資源。如果要重新播放音頻文件,則需要調(diào)用reset()返回到空閑狀態(tài)。第89頁,共280頁。【例3-1】設(shè)計一個音樂播放器, 播放項(xiàng)目資源中的音樂音樂播放器運(yùn)行效果第90頁,共280頁。停止播放的事件,可作如下改進(jìn),以

43、便于重新激活播放. Override public void onClick(View v) mp.stop(); Start.setImageResource(R.drawable.music_play); try mp= MediaPlayer.create(Localmp3Activity.this, R.raw.abc); mp.setLooping(true); catch(Exception e) Log.e(mp3play error); 第91頁,共280頁。3.1.4 播放SDcard里的文件模擬器啟動后,使用Android studio的DDMS調(diào)試工具查看 File Ex

44、plorer。默認(rèn)情況下無法顯示emulated下面的子目錄。需要用adb root命令,然后才能訪問文件和子目錄,也能刪除文件。第92頁,共280頁。在AndroidManifest.xml清單中申請權(quán)限。第93頁,共280頁。動態(tài)申請權(quán)限Android 6.0后的版本權(quán)限不但要在清單中加入,而且要在運(yùn)行時動態(tài)申請,方法如下。在控制文件的onCreate()方法中調(diào)用上述的verifyStoragePermissions (Activity activity)方法。/ Storage Permissionsprivate static final int REQUEST_EXTERNAL_S

45、TORAGE = 1;private static String PERMISSIONS_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE;public static void verifyStoragePermissions(Activity activity) / Check if we have read permission int permission = ActivityCompat.checkSelfPermission(activity,

46、 Manifest.permission.READ _EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) / We dont have permission so prompt the user ActivityCompat.requestPermissions( activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); 第94頁,共280頁。設(shè)置多媒體數(shù)據(jù)來源需要調(diào)用setDataSource()方法例如:String filename= E

47、nvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+/abc.mp3;mediaplay.setDataSource(str);第95頁,共280頁?!纠?-2】設(shè)計一個音樂播放器, 播放SD卡中的音樂將音頻文件abc.mp3復(fù)制到SD卡中。音樂播放器運(yùn)效果 第96頁,共280頁。3.2 視頻播放Android實(shí)現(xiàn)視頻播放的應(yīng)用程序有兩種:MediaPlayer + SurfaceViewMediaController + VideoView第一種方法是基礎(chǔ),可以編程控制播放器的大小和位置。

48、第二種方法使用起來更方便,但由于是Android封裝好的類,播放器的大小、位置等都不接受編程控制。第97頁,共280頁。3.2.1 應(yīng)用媒體播放器播放視頻【例3-3】應(yīng)用媒體播放器組件MediaPlayer設(shè)計一個視頻播放器第98頁,共280頁。SurfaceView + MediaPlayer 調(diào)用示范SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView);SurfaceHolder sh = surfaceView.getHolder();下面是訪問項(xiàng)目資源內(nèi)的視頻:mediaPlayer = new Me

49、diaPlayer();mediaPlayer = MediaPlayer.create(this,R.raw.video); /設(shè)置數(shù)據(jù)源mediaPlayer.setDisplay(sh);mediaPlayer.start();下面是訪問Sdcard的視頻:path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+/sample.3gp;mMediaPlayer.setDataSource(path);/設(shè)置數(shù)據(jù)源mMediaPlayer.setDisplay(sh);mMe

50、diaPlayer.prepare();mMediaPlayer.start();第99頁,共280頁。3.2.2 應(yīng)用視頻視圖播放視頻VideoView是系統(tǒng)自帶的視頻播放控件,自帶進(jìn)度條、暫停、播放等功能,使用起來十分簡單,只需要為控件設(shè)置好播放路徑,判斷監(jiān)聽是否準(zhǔn)備就緒,直接播放即可。 第100頁,共280頁。3.3 錄音與拍照3.3.1 MediaRecorder類Android系統(tǒng)提供了兩種API用于實(shí)現(xiàn)錄音功能:AudioRecord和MediaRecorder。MediaRecorder已實(shí)現(xiàn)大量的封裝,操作起來簡單,而AudioRecord比較靈活,能實(shí)現(xiàn)更多的功能。Media

51、Recorder可以實(shí)現(xiàn)錄音和錄像,需要嚴(yán)格遵守API說明中的函數(shù)調(diào)用先后順序。MediaRecoeder已經(jīng)集成了錄音、編碼、壓縮等,優(yōu)點(diǎn)是大部分以及集成,直接調(diào)用相關(guān)接口即可,代碼量小。第101頁,共280頁。3.3.1 MediaRecorder類創(chuàng)建錄音對象。MediaRecorder mr = new MediaRecorder();設(shè)置錄音文件。AMR格式多用于人聲,適合通話錄音。例如:File soundFile = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+.amr

52、);if(!soundFile.exists() try soundFile.createNewFile(); catch (IOException e) mr.setOutputFile(soundFile.getAbsolutePath(); 第102頁,共280頁。在AndroidManifest.xml中增加音頻捕獲權(quán)限第103頁,共280頁。程序的運(yùn)行結(jié)果3.3.3 拍照【例3-6】使用Intent設(shè)計一個簡易照相機(jī)。第104頁,共280頁。3.4 實(shí)戰(zhàn)演練音樂播放器修改【例3-2】加入進(jìn)度條SeekBar功能和退出QUIT功能。修改音樂播放器界面,功能包括:(1)播放/暫停、停止、

53、退出功能;(2)進(jìn)度條顯示播放進(jìn)度,拖動進(jìn)度條改變進(jìn)度功能。第105頁,共280頁。THANKS第106頁,共280頁。Android應(yīng)用開發(fā)案例教程 (Android Studio版) 第107頁,共280頁。contents010302040506Android UI設(shè)計圖像和動畫數(shù)據(jù)存儲廣播Broadcast與服務(wù)Service媒體播放與錄制Activity與多個用戶界面目 錄07網(wǎng)絡(luò)編程技術(shù)第108頁,共280頁。廣播與服務(wù) Chap 04第109頁,共280頁。第4章 目 錄4.1 消息廣播4.2 系統(tǒng)服務(wù)4.3 后臺服務(wù)第110頁,共280頁。4.1消息廣播 在Android中,有

54、一些操作完成以后,會發(fā)送廣播,比如說發(fā)出一條短信,或打出一個電話,如果某個程序接收了這個廣播,就會做相應(yīng)的處理。 這個廣播跟我們傳統(tǒng)意義中的電臺廣播有些相似之處。之所以叫做廣播,就是因?yàn)樗回?fù)責(zé)“說”而不管你“聽不聽”,也就是不管你接收方如何處理。 廣播可以被一個以上的應(yīng)用程序所接收,也可能不被任何應(yīng)用程序所接收。第111頁,共280頁。 Android廣播機(jī)制三要素(1)廣播(Broadcast):用于發(fā)送廣播,是一種運(yùn)用在應(yīng)用程序之間的傳遞消息的機(jī)制。(2)廣播接收器(Broadcast Receiver):用于接收廣播,是對發(fā)出來的廣播進(jìn)行過濾、接收、響應(yīng)的組件。(3)意圖內(nèi)容(Inte

55、nt):用于保存廣播相關(guān)信息。1第112頁,共280頁。實(shí)現(xiàn)廣播和接收機(jī)制有以下5個步驟(1)創(chuàng)建Intent對象,設(shè)置Intent對象的action.屬性。Intent intent = new Intent();intent.setAction(abc);(2)編寫需要廣播的信息內(nèi)容,將需要廣播的信息封裝到Intent中,通過Context的sendBroadcast()方法,將Intent廣播出去。intent.putExtra(hello, 這是廣播信息!)sendBroadcast(intent);3第113頁,共280頁。實(shí)現(xiàn)廣播和接收機(jī)制有以下5個步驟(3) 編寫一個繼承Broa

56、dcastReceiver的廣播接收器class TestReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) /* */ (4) 在配置文件AndroidManifest.xml中注冊廣播接收類。(5) 銷毀廣播接收器。在一定時間內(nèi)廣播接收器會被銷毀。3第114頁,共280頁。【例4-1】一個簡單的消息廣播程序示例圖4-1 簡單的消息廣播程序運(yùn)行效果第115頁,共280頁。4.2 系統(tǒng)服務(wù)4.2.1 Android的系統(tǒng)服務(wù)介紹Android有許多標(biāo)準(zhǔn)

57、系統(tǒng)服務(wù)(SystemService),如窗口管理服務(wù)WindowManager,通知管理服務(wù)NotificationManager、振動管理服務(wù)Vibrator、電池管理服務(wù)BatteryManager等。系統(tǒng)服務(wù)實(shí)際上可以看作一個對象,通過Activity的getSystemService()方法可以獲得指定對象(系統(tǒng)服務(wù))。下面介紹兩個常見的系統(tǒng)服務(wù)。第116頁,共280頁。 系統(tǒng)通知服務(wù)NotificationNotification是一種具有全局效果的通知,在手機(jī)的通知欄顯示。當(dāng)應(yīng)用程序向系統(tǒng)發(fā)出通知時,它先以圖標(biāo)的形式顯示在通知欄中,用戶下拉通知欄可以查看通知的詳細(xì)信息。Notif

58、ication提供了文字、聲音、振動等屬性。Notification主要涉及 Notification.Builder()方法和NotificationManager類。調(diào)用NotificationManager對象的notify() 方法把通知發(fā)送到狀態(tài)欄。1第117頁,共280頁。 系統(tǒng)通知服務(wù)Notification通知服務(wù)管理器 NotificationManager通知服務(wù) NOTIFICATION_SERVICE通知 Notification異步激發(fā) PendingIntentNotification notification;NotificationManager m =(Not

59、ificationManager) getSystemService (NOTIFICATION_SERVICE);m.notify(0,notification);第118頁,共280頁?!纠?-2】系統(tǒng)通知服務(wù)示例第119頁,共280頁。系統(tǒng)定時服務(wù) AlarmManager又稱為系統(tǒng)鬧鐘服務(wù)??梢詾閼?yīng)用程序設(shè)定一個在未來某個時間喚醒的功能,在到達(dá)設(shè)定的時間后會廣播之前注冊的Intent。當(dāng)鬧鐘響起,實(shí)際上是系統(tǒng)發(fā)出了為這個鬧鐘注冊的廣播,可自動開啟目標(biāo)應(yīng)用。注冊的鬧鐘在設(shè)備睡眠的時候仍然會保留,可以選擇性地設(shè)置是否喚醒設(shè)備。只有當(dāng)設(shè)備關(guān)閉或是重啟的時候才會被清除。2第120頁,共280頁

60、。系統(tǒng)定時服務(wù) AlarmManager系統(tǒng)定時服務(wù) AlarmManager使用步驟如下。(1)獲得ALarmManager實(shí)例。(2) 定義一個PendingIntent發(fā)出廣播。(3) 調(diào)用ALarmManager方法,設(shè)置定時或重復(fù)提醒。2ALarmManager am=(ALarmManager)getSystemService(ALARM_SERVICE);第121頁,共280頁。AlarmManager服務(wù)主要有下面兩種應(yīng)用:(1)在指定時長執(zhí)行某項(xiàng)操作 (2)周期性地執(zhí)行某項(xiàng)操作【例4-3】 AlarmManager時鐘服務(wù)示例第122頁,共280頁。4.2.2 系統(tǒng)功能的調(diào)用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論