物聯(lián)網(wǎng)Android程序開發(fā)案例式教程PPT完整全套教學(xué)課件_第1頁
物聯(lián)網(wǎng)Android程序開發(fā)案例式教程PPT完整全套教學(xué)課件_第2頁
物聯(lián)網(wǎng)Android程序開發(fā)案例式教程PPT完整全套教學(xué)課件_第3頁
物聯(lián)網(wǎng)Android程序開發(fā)案例式教程PPT完整全套教學(xué)課件_第4頁
物聯(lián)網(wǎng)Android程序開發(fā)案例式教程PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩423頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《Android物聯(lián)網(wǎng)開發(fā)案例式教程》第1章物聯(lián)網(wǎng)Android開發(fā)啟程第2章UI開發(fā)的方方面面第3章活動與碎片第4章01數(shù)據(jù)存儲之文件存儲和SharedPreferences存儲第4章02數(shù)據(jù)存儲之SQLite數(shù)據(jù)庫第5章01廣播第5章02服務(wù)第6章內(nèi)容提供者第7章消息與線程處理第8章01手機(jī)媒體動畫的實(shí)現(xiàn)之多媒體開發(fā)第8章02手機(jī)媒體動畫的實(shí)現(xiàn)之通知第8章03手機(jī)媒體動畫的實(shí)現(xiàn)之拍照和取圖第8章04手機(jī)媒體動畫的實(shí)現(xiàn)之動畫實(shí)現(xiàn)第8章05手機(jī)媒體動畫的實(shí)現(xiàn)之智能溫控系統(tǒng)第9章01訪問百度首頁第9章02使用OkHttp框架訪問百度首頁數(shù)據(jù)第9章03家居視頻監(jiān)控第10章01使用注解綁定組件和處理事件監(jiān)聽第10章02加載網(wǎng)絡(luò)圖片第10章03使用xUtils框架訪問百度首頁全套PPT課件章節(jié)內(nèi)容簡介本章主要介紹了Android在物聯(lián)網(wǎng)中的應(yīng)用,以及搭建Android的開發(fā)環(huán)境,創(chuàng)建第一個Android工程,并簡單的介紹如何查看Android的日志,為后續(xù)的Android開發(fā)做好準(zhǔn)備。第一章Android物聯(lián)網(wǎng)開發(fā)啟程本章學(xué)習(xí)目標(biāo)了解Android的背景與物聯(lián)網(wǎng)的關(guān)系掌握Android開發(fā)工具AndroidStudio的安裝與使用掌握如何創(chuàng)建Android工程理解Android工程的目錄結(jié)構(gòu)掌握Android日志的查看與使用1案例1物聯(lián)網(wǎng)與Android2案例2啟程前的準(zhǔn)備3案例3第一個Android程序4案例目錄CONTENTS案例4日志工具的使用1案例1物聯(lián)網(wǎng)與Android案例目錄CONTENTS2案例2啟程前的準(zhǔn)備3案例3第一個Android程序4案例4日志工具的使用案例描述:物聯(lián)網(wǎng)與Android在學(xué)習(xí)物聯(lián)網(wǎng)中的Android開發(fā)前,我們有必要知道什么是Android?以及它在物聯(lián)網(wǎng)的應(yīng)用中可以起什么作用,本案例帶領(lǐng)大家了解物聯(lián)網(wǎng)中的Android。什么是Android?Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。Android系統(tǒng)各個版本的最新占有率:Android系統(tǒng)架構(gòu)Android的系統(tǒng)架構(gòu)大致可分為四層架構(gòu):Linux內(nèi)核層、系統(tǒng)運(yùn)行庫層、應(yīng)用框架層和應(yīng)用層:Android與物聯(lián)網(wǎng)物聯(lián)網(wǎng)的體系結(jié)構(gòu)主要由三個層次組成:感知層、網(wǎng)絡(luò)層、應(yīng)用層。Android程序開發(fā)

正是在物聯(lián)網(wǎng)體系架構(gòu)中的應(yīng)用層,Android主要負(fù)責(zé)的是應(yīng)用層移動客戶端的應(yīng)用開發(fā)。1案例1物聯(lián)網(wǎng)與Android3案例3第一個Android程序4案例目錄CONTENTS案例4日志工具的使用2案例2啟程前的準(zhǔn)備案例描述:啟程前的準(zhǔn)備有一款好的開發(fā)工具,是完成高質(zhì)量、高效率的Android開發(fā)必不可少的。AndroidStudio作為Google推薦的安卓開發(fā)第一利器,為絕大多數(shù)安卓開發(fā)人員鐘愛。本案例要求搭建Android開發(fā)環(huán)境,為后續(xù)的Android開發(fā)做準(zhǔn)備。案例實(shí)現(xiàn):Android開發(fā)環(huán)境搭建安裝JDKJDK(JavaDevelopmentKit)Java開發(fā)工具包,在使用Java語言開發(fā)程序前需要安裝此工具包。JDK的下載地址:/technetwork/java/javase/downloads/index.html案例實(shí)現(xiàn):Android開發(fā)環(huán)境搭建2.配置環(huán)境變量及驗證安裝JDK是否正確案例實(shí)現(xiàn):Android開發(fā)環(huán)境搭建3.安裝AndroidStudioAndroidStudio的官網(wǎng)下載地址:/AndroidStudio也可以到AS中文社區(qū)官網(wǎng)進(jìn)行下載:/1案例1物聯(lián)網(wǎng)與Android2案例2啟程前的準(zhǔn)備4案例目錄CONTENTS案例4日志工具的使用3案例3第一個Android程序案例描述:第一個Android程序搭建好Android開發(fā)環(huán)境后,接下來就是在AndroidStudio上創(chuàng)建第一個Android項目,運(yùn)行查看結(jié)果。并分析第一個Android項目目錄結(jié)構(gòu)。案例實(shí)現(xiàn):第一個Android程序新建AndroidStudio項目創(chuàng)建過程AndroidStudio界面簡介創(chuàng)建模擬器運(yùn)行Android程序在真機(jī)上運(yùn)行Android程序Android的項目結(jié)構(gòu)分析案例實(shí)現(xiàn):第一個Android程序6.Android的項目結(jié)構(gòu)分析1Android模式:Project模式:案例實(shí)現(xiàn):第一個Android程序6.Android的項目結(jié)構(gòu)分析2(1)libs如果你的項目中使用到了第三方j(luò)ar包,就需要把這些jar包都放在libs目錄下,放在這個目錄下的jar包都會被自動添加到構(gòu)建路徑里去。(2)javajava目錄是放置我們所有java代碼的地方,展開該目錄,你將看到我們剛才創(chuàng)建的MainActivity文件就在里面。(3)res這個目錄是用來放項目中使用到的所有圖片,布局,字符串等資源。當(dāng)然這個目錄下還有很多子目錄,圖片放在drawable目錄下,布局放在layout目錄下,字符串放在values目錄下。(4)AndroidManifest.xml這是你整個Android項目的配置文件,你在程序中定義的所有四大組件都需要在這個文件里注冊,另外還可以在這個文件中給應(yīng)用程序添加權(quán)限聲明1案例1物聯(lián)網(wǎng)與Android2案例2啟程前的準(zhǔn)備3案例3第一個Android程序4案例目錄CONTENTS案例4日志工具的使用案例描述通過上一個案例的學(xué)習(xí),你已經(jīng)成功創(chuàng)建了第一個Android程序,并且對Android項目的目錄結(jié)構(gòu)和運(yùn)行流程有了初步的了解。接下來在本案例中學(xué)習(xí)一下Android中日志工具的使用方法,以方便在后面的Android開發(fā)過程中查看日志信息,以及對Android程序進(jìn)行調(diào)試。Android的日志工具LogAndroid中提供一個日志工具類Log,該類提供以下5種打印日志的方法,具體如下。Log.v():用于打印所有的Android日志信息,包括哪些最為瑣碎、意義較小的日志信息。對應(yīng)級別verbose,是Android日志里面級別最低的一種。Log.d():用于打印一些調(diào)試信息,這些信息一般用于調(diào)試程序和分析問題。對應(yīng)級別debug,比verbose高一級。Log.i():用于打印一些比較重要的數(shù)據(jù),一般在程序中使用該級別日志分析用戶的行為數(shù)據(jù)。對應(yīng)級別info,比debug高一級。Log.w():用于打印一些警告信息,一般在程序中使用該信息來提示程序可能存在的潛在危險。對應(yīng)級別warn,比info高一級。Log.e():用于打印程序中的錯誤信息。該信息用于提示程序出現(xiàn)錯誤的地方,必須盡快修復(fù)。對應(yīng)級別error,比warn高一級本章總結(jié)通過本章的學(xué)習(xí),你已經(jīng)成為一個Android的開發(fā)者了,你對Android系統(tǒng)與物聯(lián)網(wǎng)的關(guān)系有了初步的認(rèn)識,并且成功搭建了Android的開發(fā)環(huán)境,接著還創(chuàng)建了第一個Android項目,對Android的項目目錄結(jié)構(gòu)與執(zhí)行過程有了一定的認(rèn)識,在最后還學(xué)習(xí)了Android日志工具的使用。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本章主要介紹AndroidUI方面的知識,使用Android提供的常用布局和常用控件來編寫程序界面。第2章UI開發(fā)的方方面面本章學(xué)習(xí)目標(biāo)掌握Android常用布局掌握Android常用控件掌握對話框AlertDialog的使用掌握滾動控件RecyclerView的使用1案例1線性布局2案例2相對布局3案例3幀布局4案例目錄CONTENTS案例4登陸界面567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件1案例1線性布局2案例2相對布局34案例4登陸界面567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例3幀布局案例描述一個豐富的界面總是由很多控件組成,那么如何讓各個控件有條不絮的排列在界面上呢?這就需要借助Android提供的布局來實(shí)現(xiàn)了。在布局內(nèi)可以放置很多控件,也可以放置布局進(jìn)行嵌套。而線性布局顧名思義就是其內(nèi)的控件按照線性進(jìn)行排列。本案例主要學(xué)習(xí)線性布局的主要屬性特征,以及使用線性布局完成界面的開發(fā)。涉及知識點(diǎn)為:方向、對齊、比例顯示屬性設(shè)置線性布局的排列方向在Android中,使用LinearLayout表示線性布局。線性布局排列方向有兩個:水平方向

垂直方向。在布局xml文件中,使用android:orientation=“vertical”屬性表示排列方向是垂直方向,使用android:orientation=“horizontal”屬性表示排列方向是水平方向。默認(rèn)是水平方向線性布局的排列方向線性布局的排列方向把線性布局的方向改成水平的:線性布局的對齊方式控件在布局中的對齊方式使用屬性android:layout_gravity來設(shè)置,對應(yīng)的值分別是:top(上對齊)bottom(下對齊)left(左對齊)right(右對齊)center_vetical(垂直居中對齊)center_horizontal(水平居中對齊)center(中間對齊)注意:

當(dāng)LinearLayout的排列方向是horizontal時,只有垂直方向上的對齊方式才會生效。同理,當(dāng)LinearLayout的排列方向是vetical時,只要水平方向上的對齊方式才會生效。線性布局的按比例顯示LinearLayout中有一個重要的屬性:android:layout_weight,這個屬性可以使布局按比例的方式顯示大小。左面的代碼中,按鈕1的比重值為1,按鈕2的比重值為2,按鈕3的比重值為1。同時如果寬度使用比重顯示大小,那么控件中的android:layout_width設(shè)置寬度大小的屬性值應(yīng)該設(shè)置成0dp。案例設(shè)計效果圖可以看成一個大布局嵌套了5個小布局組成。大布局中的每個小布局都是線性布局。

(1)線性布局排列方向為horizontal水平方向,布局的背景顏色設(shè)置成紅色。(2)線性布局排列方向為vertical垂直方向,布局背景顏色設(shè)置成綠色。(3)線性布局排列方向為vertical垂直方向,且第一個按鈕的對齊方向為left,第二個按鈕的對齊方向為center,第三個按鈕的對齊方向為right,布局背景顏色設(shè)置成藍(lán)色。(4)線性布局排列方向為horizontal,第一個按鈕和第二個按鈕的寬度比例為2:1,布局背景顏色設(shè)置成淺藍(lán)。(5)線性

布局排列方向為horizontal,第一個按鈕和第二個按鈕的寬度比例為1:1,布局背景顏色設(shè)置成黃色。12案例2相對布局34案例4登陸界面567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例3幀布局案例1線性布局案例描述相對布局RelativeLayout通過相對定位的方式讓控件出現(xiàn)在布局的任何位置。本案例需要使用相對布局設(shè)置控件的位置,實(shí)現(xiàn)如右圖的界面效果。涉及知識點(diǎn)為:

按父布局對齊和按兄弟控件對齊相對布局的常用屬性控件根據(jù)父布局來定位控件根據(jù)兄弟控件來定位案例設(shè)計效果圖可以使用相對布局完成,把內(nèi)部可以分成2部分:(1)第一部為居中的按鈕1與父布局四個角的按鈕2、按鈕3、按鈕4、按鈕5;(2)第二部為與正中心按鈕1相鄰四個角的按鈕6、按鈕7、按鈕8、按鈕9

。1案例1線性布局2案例2相對布局3案例3幀布局4案例4登陸界面567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例描述幀布局FrameLayout相對于前面兩種布局就簡單多了,這種布局所有的控件都會默認(rèn)擺放在布局的左上角。本案例要求利用幀布局完成層疊效果。用幀布局實(shí)現(xiàn)層疊效果案例設(shè)計在幀布局內(nèi)按順序添加View控件:(1)第一個View控件的長寬都為200dp,背景顏色為#ff0000。(2)第二個View控件的長寬都為150dp,背景顏色為#00ff00。(3)第三個View控件的長寬都為100dp,背景顏色為#0000ff。12案例2相對布局34案例4登錄界面567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例3幀布局案例1線性布局案例描述本案例需要完成一個登錄界面,能夠輸入賬號和密碼,并且點(diǎn)擊登陸的時候能夠彈窗顯示賬號密碼,效果如下圖:涉及知識點(diǎn)為:TextViewButtonEditTextTextView的使用TextView主要用于在界面上顯示一段文本信息。TextView的使用TextView設(shè)置大小(單位SP)和顏色及文件顯示位置:Button的使用Button也就是按鈕,是程序與用戶交互非常重要的一個控件,大部分屬性與TextView差不多。Button與用戶交互主要通過注冊事件監(jiān)聽來實(shí)現(xiàn)。Button的使用使用本類對象來處理事件監(jiān)聽:Button的使用在布局文件xml的Button中添加屬性android:onClick,并給一個值,在MainActivity中添加該事件處理方法。建議熟悉這種用法。使用onClick屬性來處理事件監(jiān)聽:EditText的使用EditText控件,也稱為輸入框,它允許用戶在控件里輸入和編輯內(nèi)容。EditText內(nèi)有一個屬性android:hint可以設(shè)置EditText輸入的提示文字。屬性android:maxLines=“1”可以設(shè)置EditText只能輸入一行。案例設(shè)計登錄界面主要可以分為3個部分:(1)第一個部分為文本信息“登錄界面”,顯示在布局的最上方法,可以使用TextView,寬度占滿屏幕,文字居中顯示。(2)第二部分為賬號密碼輸入?yún)^(qū),賬號文本框與賬號輸入框可以放在一個子布局中,使用線性水平排列;同理,密碼文本框與密碼輸入框也使用線性水平排列。(3)第三部分為登陸按鈕,寬度占滿屏幕,高度使用適配顯示。最后再對布局的控件的居中與邊距進(jìn)行調(diào)整。12案例2相對布局34567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例3幀布局案例1線性布局案例4登陸界面案例描述本案例需要完成一個模擬下載進(jìn)度條的效果。該效果能夠?qū)崿F(xiàn)每次點(diǎn)擊按鈕進(jìn)行增加進(jìn)度條的進(jìn)度。涉及知識點(diǎn)為:ImageViewProgressBar點(diǎn)擊事件ImageView的使用ImageView是用于在界面上顯示圖片的一個控件。android:src屬性綁定要顯示的圖片。android:background把圖片當(dāng)作背景顯示更換圖片資源用setImageResourceProgressBar用于在界面上顯示一個進(jìn)度條。ProgressBar的使用案例設(shè)計xml布局代碼設(shè)計思路:(1)父布局使用線性布局、排列方向為vertical。(2)在布局內(nèi)添加ImageView控件,其中android:src屬性指定圖片load_not_start.png為開始下載。(3)在布局內(nèi)繼續(xù)添加ProgressBar控件,設(shè)置為不可視(默認(rèn)圓環(huán)進(jìn)度條)。(4)在布局內(nèi)繼續(xù)添加ProgressBar控件,控件風(fēng)格為水平進(jìn)度條。(5)在布局內(nèi)繼續(xù)添加Button控件。java代碼設(shè)計思路:(1)在MainActivity中綁定這個布局,并初始化布局內(nèi)的控件。(2)給Button注冊事件監(jiān)聽器,并實(shí)現(xiàn)onClick方法。(3)在onClick方法中處理進(jìn)度條和圖片顯示的邏輯代碼。12案例2相對布局34案例4登陸界面567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例3幀布局案例1線性布局案例4登陸界面對話框的簡單使用在開發(fā)過程中,與用戶交互式免不了會用到對話框以實(shí)現(xiàn)更好的用戶體驗。本案例使用AlertDialog創(chuàng)建一個提示框與列表框。AlertDialog用于在界面上顯示一個普通對話框。AlertDialog的使用列表對話框通過setItems綁定選項表并處理事件偵聽:列表對話框的使用案例設(shè)計(1)父布局使用線性布局,加入兩個按鈕,一個點(diǎn)擊用于彈出提示框,另一個點(diǎn)擊用于彈出列表框。(2)在MainActivity并注冊提示框按鈕的監(jiān)聽器,在onClick()回調(diào)方法中創(chuàng)建對話框AlertDialog的構(gòu)建對象Builder對象。(3)使用Builder對象提供的方法,設(shè)置對話框標(biāo)題、內(nèi)容、確認(rèn)和取消按鈕效果等。(4)調(diào)用Builder對象的show()方法創(chuàng)建并顯示對話框。(5)同理,創(chuàng)建并顯示列表框按鈕,需要注意的是列表對話框使用Builder對象的setItems()方法設(shè)置列表內(nèi)容。12案例2相對布局34567案例5模擬下載進(jìn)度條效果案例6對話框的簡單使用案例7滾動控件案例目錄CONTENTS案例3幀布局案例1線性布局案例4登陸界面案例描述滾動控件RecyclerView可以實(shí)現(xiàn)數(shù)據(jù)的縱向滾動,也可以實(shí)現(xiàn)橫向滾動。它比Android的另一個數(shù)據(jù)滾動控件ListView更強(qiáng)大、更靈活。越來越多程序已經(jīng)從ListView轉(zhuǎn)向了RecyclerView。RecyclerView相對于之前的案例是比較復(fù)雜和比較難理解的。本案例需要使用RecyclerView完成一個瀑布流的效果RecyclerView的使用使用RecyclerView這個控件,首先需要在項目的build.gradle中添加相應(yīng)的依賴庫才行。打開app/builde.gradle文件,在dependencies閉包中添加如下內(nèi)容:dependencies{

……

implementation'com.android.support:recyclerview-v7:28.0.0’……

}添加完后,在右上角有一個同步SyncNow的提示,點(diǎn)擊進(jìn)行同步構(gòu)建RecyclerView的適配器1自定義適配器VegieAdapter,這個適配器繼承RecyclerView.Adapter,并指定泛型VegieAdapter.ViewHolder,其中ViewHolder是VegieAdapter中的一個內(nèi)部類:RecyclerView的適配器2RecyclerView的適配器3在MainActivity中使用RecyclerView案例設(shè)計(1)在布局文件中加入android.support.v7.widget.RecyclerView控件。(2)創(chuàng)建布局文件item_vegie.xml,用于設(shè)置列表的子項。(3)創(chuàng)建實(shí)體類Vegie,提供字段name與imageId,用于設(shè)置名字和圖片id。(4)創(chuàng)建適配器類VegieAdapter,繼承RecyclerView.Adapter。(5)修改MainActivity類的代碼,創(chuàng)建RecyclerView實(shí)例,并設(shè)置適配器。數(shù)據(jù)使用模擬的值。本章總結(jié)本章主要學(xué)習(xí)了基本的AndroidUI設(shè)計,包括布局使用、常用控件的使用,通過本章的學(xué)習(xí),你已經(jīng)學(xué)會了Android界面的基本設(shè)計,在有界面的基礎(chǔ)上,我們才可以繼續(xù)學(xué)習(xí)后續(xù)相關(guān)處理邏輯的知識。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本章主要介紹Android中的活動與碎片,學(xué)習(xí)完本章能夠讓你對Android的界面顯示和切換有更深的理解。第3章活動與碎片本章學(xué)習(xí)目標(biāo)掌握創(chuàng)建Activity的過程掌握顯示Intent的使用掌握通過Intent在活動之間傳遞數(shù)據(jù)掌握Activity的生命周期掌握Fragment的簡單使用1案例1創(chuàng)建Activity2案例2Activity的跳轉(zhuǎn)3案例3Intent傳遞數(shù)據(jù)4案例目錄CONTENTS案例4Activity的生命周期解析5案例5Fragment的簡單使用2案例2Activity的跳轉(zhuǎn)3案例3Intent傳遞數(shù)據(jù)4案例目錄CONTENTS案例4Activity的生命周期解析5案例5Fragment的簡單使用1案例1創(chuàng)建Activity案例描述上一章學(xué)習(xí)了UI的知識,也知道要在MainActivity中綁定布局,這樣我們運(yùn)行時,才能顯示這個布局的界面。那么MainActivity是什么呢?除了MainActivity外,我們還可不可以創(chuàng)建其他的Activity。本案例主要介紹Activity的基本知識,并且手動創(chuàng)建一個Activity。涉及知識點(diǎn)為:Activity的創(chuàng)建Activity的概念A(yù)ctivity(活動)是Android組件中最基本也是最為常見

用的四大組件(Activity,Service服務(wù),ContentProvider內(nèi)容提供者,BroadcastReceiver廣播接收器)。Activity是一個應(yīng)用程序組件,提供一個屏幕,用戶可以用來交互為了完成某項任務(wù)。Activity中所有操作都與用戶密切相關(guān),是一個負(fù)責(zé)與用戶交互的組件1案例1創(chuàng)建Activity3案例3Intent傳遞數(shù)據(jù)4案例目錄CONTENTS案例4Activity的生命周期解析5案例5Fragment的簡單使用2案例2Activity的跳轉(zhuǎn)案例描述上一個案例我們已經(jīng)成功的創(chuàng)建一個Activity(活動),接下來本案例需要完成能夠從一個Activity中點(diǎn)擊按鈕跳轉(zhuǎn)到另一個Activity上。涉及知識點(diǎn)為:Intent的概念與簡單使用Intent概念A(yù)ndroid中提供了Intent機(jī)制來協(xié)助應(yīng)用間的交互與通訊,或者采用更準(zhǔn)確的說法是,Intent不僅可用于應(yīng)用程序之間,也可用于應(yīng)用程序內(nèi)部的activity,service和broadcastreceiver之間的交互。Intent這個英語單詞的本意是“目的、意向、意圖”。Intent是一種運(yùn)行時綁定(runtimebinding)機(jī)制,它能在程序運(yùn)行的過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達(dá)某種請求或者意愿,Android會根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來響應(yīng)。使用Intent在Activity間跳轉(zhuǎn)案例設(shè)計(1)創(chuàng)建FirstActivity與SecondActivity。(2)在FirstActivity綁定的布局activity_first.xml代碼中加入一個按鈕。(3)在FirstActivity中注冊按鈕監(jiān)聽器,在onClick()方法中創(chuàng)建一個Intent實(shí)例,并啟動這個intent。1案例1創(chuàng)建Activity2案例2Activity的跳轉(zhuǎn)4案例目錄CONTENTS案例4Activity的生命周期解析5案例5Fragment的簡單使用3案例3Intent傳遞數(shù)據(jù)案例描述上一個案例我們已經(jīng)可以簡單使用Intent進(jìn)行Activity的跳轉(zhuǎn)了,那么在跳轉(zhuǎn)的過程中是否還可以傳遞數(shù)據(jù)呢?又或是返回到前一個Activity時能夠返回數(shù)據(jù)呢?本案例利用上一章案例4的登錄界面,在點(diǎn)擊登錄按鈕時,能夠把賬號和密碼傳入到下一個Activity中。向下一個Activity傳遞數(shù)據(jù)Intent提供一系列的putExtra()方法,可以把我們想要傳遞的數(shù)據(jù)暫存在Intent中,啟動另一個Activity后,在另一個Activity中就可以從Intent中取出這些數(shù)據(jù)了。例如傳遞數(shù)據(jù)時:向下一個Activity傳遞數(shù)據(jù)在目標(biāo)Activity中,使用getIntent()獲取意圖,再使用意圖通過鍵取得具體的值,如下所示。返回數(shù)據(jù)給上一個Activity在第一個Activity中,啟動第二個Activity時,使用方法startActivityForResult(),并傳入請求碼。在第二個Activity中使用setResult(RESULT_OK,intent)返回數(shù)據(jù)。在第一個Activity中,重寫onActivityResult(),處理返回的數(shù)據(jù)案例設(shè)計(1)創(chuàng)建LoginActivity,

并在清單文件中設(shè)置LoginActivity為應(yīng)用程序的第一個活動界面。(2)將上一章案例4的登錄界面布局代碼復(fù)制到LoginActivity綁定的布局中。(3)創(chuàng)建HomeActivity,在登錄界面LoginActivity中點(diǎn)擊登陸會跳轉(zhuǎn)到該活動界面上。(4)在LoginActivity中注冊登錄按鈕的監(jiān)聽器,并在回調(diào)方法onClick()方法中添加跳轉(zhuǎn)到HomeActivity代碼并傳遞賬號與密碼數(shù)據(jù)。(5)在HomeActivity中接收數(shù)據(jù),并將賬號與密碼展示在界面上。1案例1創(chuàng)建Activity2案例2Activity的跳轉(zhuǎn)3案例3Intent傳遞數(shù)據(jù)案例目錄CONTENTS5案例5Fragment的簡單使用4案例4Activity的生命周期解析案例描述通過前面的學(xué)習(xí),我們已經(jīng)能夠創(chuàng)建Activity,并且能夠?qū)崿F(xiàn)Activity之間的跳轉(zhuǎn)。那么你有思考過,Activity活動界面的在狀態(tài)改變時,例如從一個AActivity跳轉(zhuǎn)到BActivity時,這兩個Activity的狀態(tài)變化,以及他們會分別執(zhí)行哪些代碼。本案例使用日志打印查看Activity生命周期的變化。Activity四種狀態(tài)(1)運(yùn)行狀態(tài):在該狀態(tài)下,Activity可以與用戶進(jìn)行交互,Activity可見。系統(tǒng)一般不愿回收處于運(yùn)行狀態(tài)下的Activity,因為這會帶來糟糕的用戶體驗。(2)暫停狀態(tài):在該狀態(tài)下,Activity不能與用戶進(jìn)行交互,但Activit仍然可見。例如顯示一個對方框時,對話框值占用部分的屏幕,這是Activity處于暫停狀態(tài)。(3)停止?fàn)顟B(tài):當(dāng)Activity處于完全不可見時,就會進(jìn)入停止?fàn)顟B(tài)。停止?fàn)顟B(tài)下的Activity可能還在內(nèi)存中,但這是不可靠的,隨時都有可能被系統(tǒng)回收。(4)銷毀狀態(tài):Activity已經(jīng)被移除內(nèi)存的情況下,Activity就處于銷毀狀態(tài)了。Activity生命周期方法onCreate()。這個方法你已經(jīng)看過很多次了,每個活動都重寫了這個方法,并且在該方法中進(jìn)行布局的設(shè)置,控件的綁定等。這個方法會在Activity創(chuàng)建的時候被調(diào)用。onStart()。這個方法在活動有

不可見變?yōu)榭梢姷臅r候調(diào)用。onResume()。這個方法在活動準(zhǔn)備好和用戶進(jìn)行交互的時候調(diào)用。一般在onStart()執(zhí)行之后會執(zhí)行該方法。此時活動處于運(yùn)行狀態(tài)。onPause()。這個方法在活動正在停止工作時調(diào)用,例如。我們通常會在這個方法中釋放資源以及保存一些關(guān)鍵數(shù)據(jù)。onStop()。這個方法在活動完全不可見時調(diào)用。它一般在onPause()方法執(zhí)行完后執(zhí)行。onDestroy()。這個方法在活動被銷毀時調(diào)用,之后活動進(jìn)入銷毀狀態(tài)。onRestart()。該方法在活動由停止?fàn)顟B(tài)重寫變?yōu)檫\(yùn)行狀態(tài)前調(diào)用。Activity生命周期示意圖案例設(shè)計(1)創(chuàng)建一個LifeCycleActivity,布局命名為activity_life_cycle。并把LifeCycleActivity設(shè)置為啟動應(yīng)用程序顯示的第一個Activity。(2)重寫LifeCycleActivity中的方法onCreate()、onStart()、onResume()、onPause()、onStop()、onDestory()、onRestart()方法。(3)在這幾個生命周期的方法中使用Log打印相關(guān)的日志。(4)運(yùn)行應(yīng)用程序,查看LiftCycleActivity生命周期中方法的執(zhí)行過程,并分析。1案例1創(chuàng)建Activity2案例2Activity的跳轉(zhuǎn)3案例3Intent傳遞數(shù)據(jù)4案例目錄CONTENTS案例4Activity的生命周期解析5案例5Fragment的簡單使用案例描述碎片(Fragment)是一種可以嵌入到活動當(dāng)中的UI片段,它能讓程序更加合理和充分地利用大屏幕空間,因而在平板上得到廣泛應(yīng)用。一個平板的活動界面上可以由多個碎片組成,這樣我們在更新UI也變得更加靈活,只需要更新有變化的碎片即可,不需要更新整個活動界面。本案例在活動界面上嵌入兩個碎片,并且能手動更換碎片。相關(guān)知識點(diǎn)一個。案例設(shè)計(1)新建左側(cè)碎片LeftFragment與右側(cè)碎片AnotherRightFragment。(2)在左側(cè)碎片布局中加入一個按鈕。(3)新建一個FragDemoActivity,在綁定的布局中左側(cè)加入LeftFragment,右側(cè)加入一個幀布局FrameLayout。(4)編寫FragDemoActivity的代碼,動態(tài)添加碎片實(shí)例。本章總結(jié)通過本章的學(xué)習(xí),你已經(jīng)掌握Activity的創(chuàng)建和簡單的使用,并且能夠?qū)崿F(xiàn)在Activity中傳遞數(shù)據(jù)。在最后的一個案例還學(xué)習(xí)了如何使用碎片進(jìn)行簡單的開發(fā),關(guān)于碎片更詳細(xì)的開發(fā)過程,希望讀者能夠通過Android的官方文檔繼續(xù)深入學(xué)習(xí)。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本章主要針對Android開發(fā)中必須掌握的文件存儲、SharedPreference、SQLite數(shù)據(jù)庫等數(shù)據(jù)存儲技術(shù)進(jìn)行講解,帶領(lǐng)大家進(jìn)入數(shù)據(jù)存儲的世界。本節(jié)主要講解文件存儲和SharedPreference部分的內(nèi)容。第4章01數(shù)據(jù)存儲之文件存儲和SharedPreference存儲學(xué)習(xí)目標(biāo)掌握文件存儲掌握讀寫SD卡數(shù)據(jù)了解運(yùn)行時權(quán)限掌握SharedPreferences1案例1想念媽媽的南瓜飯2案例2新用戶有紅包案例目錄CONTENTS2案例2新用戶有紅包案例目錄CONTENTS1案例1想念媽媽的南瓜飯案例描述本案例要求編程實(shí)現(xiàn)保存媽媽的南瓜飯制作圖,并且要保存在SD卡上。涉及知識點(diǎn)為:openFileOutput()、openFileInput()用openFileOutput寫數(shù)據(jù)用openFileOutput寫數(shù)據(jù)代碼片段如下:用openFileOutput的注意事項openFileOutput(文件名,模式)的第一個參數(shù)文件名不可以包含路徑,因為所有的文件都是默認(rèn)存儲到/data/data/<包名>/files/下的。第二個參數(shù)是操作模式,MODE_PRIVATE是默認(rèn)的操作模式,表示如果文件已存在內(nèi)容會覆蓋。MODE_APPEND表示如果文件已存在會追加內(nèi)容。MODE_WORLD_READABLE

和MODE_WORLD_READABLE允許其它應(yīng)用程序讀寫數(shù)據(jù)引發(fā)安全問題,不建議使用。用openFileInput讀數(shù)據(jù)用openFileInput讀數(shù)據(jù)代碼片段如下:SD卡的數(shù)據(jù)存儲讀寫SD卡一般遵循以下步驟:(1)檢查SD卡狀態(tài)SD卡的數(shù)據(jù)存儲讀寫SD卡一般遵循以下步驟:(2)調(diào)用Environment.getExtermalStorgeDirectory()可以獲取到SD卡的目錄路徑,通常這個目錄是/mnt/sdcard/文件名,也可以不用獲取而直接寫/mnt/sdcard/文件名。SD卡的數(shù)據(jù)存儲讀寫SD卡一般遵循以下步驟:(3)獲得文件路徑后,就可以用java的流FileInputStream、FileOutputStream操作字節(jié)數(shù)據(jù)的讀寫和用FileReader、FileWriter操作字符數(shù)據(jù)的讀寫。SD卡的數(shù)據(jù)存儲讀寫SD卡一般遵循以下步驟:(4)在Android中使用SD卡,需要在清單文件中添加讀寫SD卡的用戶訪問權(quán)限。運(yùn)行時權(quán)限Android從6.0系統(tǒng)開始,為了保護(hù)用戶隱私,將一些權(quán)限放在在程序運(yùn)行的時候去申請。運(yùn)行時權(quán)限功能的核心就是在程序運(yùn)行過程中由用戶授權(quán)我們?nèi)?zhí)行一些危險操作。寫SD卡需要運(yùn)行時獲取WRITE_EXTERNAL_STORAGE權(quán)限。案例設(shè)計本案例要完成保存南瓜飯制作圖到SD卡中。(1)程序界面就一個按鈕,點(diǎn)擊按鈕后進(jìn)行保存drawable下的pumpkin.png到SD卡中。(2)把南瓜飯制作圖pumpkin.png放到res/drawable下。(3)通過BitmapFactory.decodeResource(getResources(),R.drawable.pumpkin)獲取圖片對應(yīng)的bitmap對象。(4)在SD卡的目錄下創(chuàng)建文件,用FileOutputStream輸出流與文件進(jìn)行綁定。(5)用bitmap的compress()對圖片進(jìn)行壓縮到輸出流中。(6)在清單文件中添加SD卡的讀寫權(quán)限,處理運(yùn)行時權(quán)限。案例實(shí)現(xiàn)演示中……案例目錄CONTENTS1案例1想念媽媽的南瓜飯2案例2新用戶有紅包案例3被刪除的微信聊天記錄案例描述本案例要求編程實(shí)現(xiàn)檢查用戶是不是第一次登錄APP,如果是就可以搶紅包。涉及知識點(diǎn)為:SharedPreferences使用SharedPreferences存儲數(shù)據(jù)SharedPreferences采用鍵值對的方式存儲數(shù)據(jù),它可以存儲不同的數(shù)據(jù)類型,如果存儲的是字符串,讀取出來的也是字符串。從SharedPreferences中取數(shù)據(jù)SharedPreferences對象提供了一系列的get的方法用于取不同類型的數(shù)據(jù),get方法是與上面的put方法一一對應(yīng)的,如果用putString()存字符串,則用getString()取字符串,用putInt()存整數(shù),則用getInt()取整數(shù)。get方法有兩個參數(shù),第一個參數(shù)是鍵,第二個參數(shù)是默認(rèn)值,就是當(dāng)傳入的鍵找不到對應(yīng)的值返回來時就以參數(shù)二的值進(jìn)行返回。。案例設(shè)計本案例要完成判斷是不是新用戶。(1)程序界面就一個ImageView,用來顯示紅包圖或機(jī)器人圖。(2)把紅包圖newperson.png放到res/drawable下,機(jī)器人圖用res/mipmap-hdpi中的ic_launcher.png。(3)程序運(yùn)行時會Activity的生命周期中會執(zhí)行onCreate()方法,在方法中從SharedPreferences中取數(shù)據(jù),如果取到默認(rèn)值則說明是第一次登錄,ImageView控件上顯示紅包圖,否則顯示機(jī)器人圖片。(4)當(dāng)Activity退出時會執(zhí)行onDestroy()方法,可以在這里用SharedPreferences保存登錄過的標(biāo)志,有登錄過值為true,沒有登錄過值為false。案例實(shí)現(xiàn)演示中……總結(jié)本節(jié)主要講解了Android中數(shù)據(jù)存儲中的文件存儲、SharedPreferences存儲。文件存儲用了openFileOutput流和openFileInput流來操作,還實(shí)現(xiàn)了把圖片存儲到了SD卡,同時處理了運(yùn)行時權(quán)限申請等操作。SharedPreferences保存的是鍵值對的數(shù)據(jù),用put方式存,用get方式取,提交用的是commit,通常用于記住用戶名和密碼等操作。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本節(jié)主要針對Android中的SQLite數(shù)據(jù)庫存儲技術(shù)進(jìn)行講解,帶領(lǐng)大家進(jìn)入數(shù)據(jù)存儲的世界。第4章02數(shù)據(jù)存儲之SQLite數(shù)據(jù)庫學(xué)習(xí)目標(biāo)SQLite數(shù)據(jù)庫的創(chuàng)建SQLite數(shù)據(jù)庫的更新SQLite數(shù)據(jù)庫的插入更新刪除查詢等操作2案例2新用戶有紅包案例目錄CONTENTS1案例1想念媽媽的南瓜飯3案例3被刪除的微信聊天記錄案例描述本案例要求編程實(shí)現(xiàn)SQLite數(shù)據(jù)庫的增加、刪除、修改、查詢操作。涉及知識點(diǎn)為:Sqlite數(shù)據(jù)庫SQLite數(shù)據(jù)庫SQLite是一個開源的、內(nèi)嵌式的、輕量級的關(guān)系數(shù)據(jù)庫,最初發(fā)布于2000年,易用、緊湊、可靠、運(yùn)算速度快,以.db文件的方式存在,核心庫不會超過250Kb的內(nèi)存,在計算機(jī)中,或在各種各樣的移動小設(shè)備中,你可能都在無意識的情況下使用過SQLite。SQLite被用于很多航空電子設(shè)備、工控、智能系統(tǒng)中。它支持ANSISQL92的一個大子集(包括事務(wù)、視圖、檢查約束、關(guān)聯(lián)子查詢和復(fù)合查詢等),還支持其它很多關(guān)系型數(shù)據(jù)庫的特色,如觸發(fā)器、索引、自動增長字段和LIMIT/OFFSET子句等。SQLiteOpenHelper幫助類Android提供了一個SQLiteOpenHelper幫助類,這是一個抽象類,要用它需要創(chuàng)建一個類去繼承它。SQLiteOpenHelper幫助類的簡化的構(gòu)造方法構(gòu)造方法有四個參數(shù),含義如注釋,通常為簡化,我們會定好數(shù)據(jù)庫名,游標(biāo)工作設(shè)為空,版本號為1,所以會用只傳一個參數(shù)Context的構(gòu)造方法代替,這里我們創(chuàng)建一個數(shù)據(jù)庫名為newland.db,版本號1的數(shù)據(jù)庫,并且把Context接收進(jìn)來。SQLite創(chuàng)建數(shù)據(jù)庫當(dāng)構(gòu)建出MySQLiteOpenHelper的實(shí)例后,調(diào)用它的兩個非常重要的方法getReadableDatabase()和getWriteableDatabase()就能夠創(chuàng)建數(shù)據(jù)庫了,數(shù)據(jù)庫文件會存在/data/data/<程序包名>/databases/目錄下,當(dāng)?shù)谝淮螆?zhí)行時會檢測系統(tǒng)中沒有我們要創(chuàng)建的數(shù)據(jù)庫時就會執(zhí)行onCreate()方法,如果檢測出來數(shù)據(jù)庫已存在,onCreate()方法就不會執(zhí)行。SQLite創(chuàng)建表SQLite的數(shù)據(jù)類型很簡單,integer表示整型,integerprimarykeyautoincrement代表主鍵是整型并且自動增長,其它都可以用text文本類型,當(dāng)把不同類型的數(shù)據(jù)插入非主鍵的字段時會自動適應(yīng)對應(yīng)的類型比如float,字符等。在數(shù)據(jù)庫newland.db中創(chuàng)建一個stu表,表中有id(主鍵),名字,年齡:調(diào)用SQLiteOpenHelper類在onCreate的方法中實(shí)例化了MySQLiteOpenHelper對象,并通過該對象獲取到操作數(shù)據(jù)庫的讀寫對象進(jìn)行數(shù)據(jù)庫的讀寫。查看創(chuàng)建好的數(shù)據(jù)庫更新數(shù)據(jù)庫版本數(shù)據(jù)庫創(chuàng)建時版本從1開始,如果要更新數(shù)據(jù)庫版本,可以給版本號一個公開的方法去操作它,當(dāng)檢測到版本號變化后onUpgrade()會自動調(diào)用,所以可以在onUpgrade()里做升級。添加數(shù)據(jù)SQLiteDatabasewritableDatabase=helper.getWritableDatabase();通過返回的對象writableDatabase可以對數(shù)據(jù)庫進(jìn)行添加、刪除、修改的操作。insert方法用于向表中添加數(shù)據(jù)。該方法接收3個參數(shù),參數(shù)一是表名,參數(shù)二一般不用直接填null,它用于在未指定添加數(shù)據(jù)的情況下給某些可為空的列自動賦值NULL,參數(shù)三是一個ContentValues對象,它提供了一系列的重載的put()方法用于向ContentValues添加數(shù)據(jù)。更新數(shù)據(jù)update()方法用于更新數(shù)據(jù)。該方法接收4個參數(shù),參數(shù)一是表名,參數(shù)二和參數(shù)三是和參數(shù)四用來指定具體更新哪一行數(shù)據(jù)。參數(shù)三對應(yīng)的是SQL中的where部分,表示更新name=?的行,而?的值通過參數(shù)四提供,參數(shù)四用字符串?dāng)?shù)組的形式存放值。以下是更新stu表中name為”小陸”的age為28:刪除數(shù)據(jù)要刪除表中的數(shù)據(jù),SQLiteDatabase中提供了一個delete()方法。該方法接收3個參數(shù),參數(shù)一是表名,參數(shù)二和參數(shù)三用于指明刪除哪些符合條件的數(shù)據(jù),不指定的話就刪除所有行。查詢數(shù)據(jù)1查詢數(shù)據(jù)是SQL中最重要的操作,通過SQLiteDatabasereadableDatabase=helper.getReadableDatabase();獲取SQLiteDatabase對象,SQLiteDatabase中提供了一個query()方法來對數(shù)據(jù)進(jìn)行查詢,該方法有7個參數(shù)。查詢數(shù)據(jù)2通常只傳需要的參數(shù)就行,調(diào)用query()后會返回一個Cursor游標(biāo)對象,查詢到的數(shù)據(jù)通過游標(biāo)對象取出來。游標(biāo)對象會指向查詢結(jié)果集第一行的前面,所以要通過Cursor游標(biāo)對象的moveToFirst()方向指向第一條記錄,通過moveToNext()指向下一條記錄,如果沒有記錄了,moveToNext()返回值為空,所以通常取數(shù)據(jù)時都用循環(huán)來控制。案例設(shè)計本案例實(shí)現(xiàn)一個Stu表的CURD操作,表中字段有_id,name,age。(1)建一個類MySQLiteOpenHelper2繼承自SQLiteOpenHelper,重寫onCreate和onUpdate方法和實(shí)現(xiàn)構(gòu)造方法,在構(gòu)造方法中指定要建的數(shù)據(jù)庫為newland.db,數(shù)據(jù)庫的版本為1。在onCreate中創(chuàng)建表stu。(2)新建類SQLiteActivity2,主布局是activity_sqlite2.xml。布局里有輸入name和age的輸入框,三個按鈕用于添加、更新、刪除,底部一個ListView用于顯示數(shù)據(jù)。(3)新建布局list_item.xml用于顯示stu表中每一行的數(shù)據(jù)。要顯示的數(shù)據(jù)有id,name,age。(4)通過SQLiteDatabase對象的insert,update,delete,query方法操作數(shù)據(jù)。(5)給ListView綁定游標(biāo)適配器并且添加事件偵聽,在偵聽方法中通過游標(biāo)適配器獲得選中ListView條目的位置的下標(biāo),把游標(biāo)定位到該下標(biāo)的位置,取出此時被選中條目的flag_id,flag_name,flag_age的值,其中flag_id用作更新和刪除時的條件,flag_name,flag_age用來回填在name和age的輸入框里。(6)插入、更新、刪除后都通過adapter.changeCursor(cursor);通知listview數(shù)據(jù)有改變從而更新顯示的內(nèi)容。案例實(shí)現(xiàn)演示中……總結(jié)本節(jié)主要講解了Android數(shù)據(jù)存儲三種方式中的SQLite存儲方式,SQLite數(shù)據(jù)庫保存的是關(guān)系型的數(shù)據(jù),本節(jié)用案例講解了數(shù)據(jù)庫的創(chuàng)建和更新以及對數(shù)據(jù)的CURD的操作。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本章主要介紹Android四大組件中的BoradcastRecerver(廣播)。BoradcastRecerver用于在不同的組件之間傳遞消息。本章以案例的形式講解廣播的各種用法。第5章01廣播學(xué)習(xí)目標(biāo)掌握靜態(tài)和動態(tài)方式注冊廣播掌握發(fā)送和接收自定義的廣播1案例1無網(wǎng)不歡2案例2自動填寫驗證碼3案例3用廣播傳遞數(shù)據(jù)4案例目錄CONTENTS案例4擊鼓傳花2案例2自動填寫驗證碼3案例3用廣播傳遞數(shù)據(jù)4案例目錄CONTENTS案例4擊鼓傳花1案例1無網(wǎng)不歡案例描述本案例要求編寫一個能夠監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化的程序,要求采用動態(tài)注冊的方式監(jiān)聽。涉及知識點(diǎn)為:標(biāo)準(zhǔn)廣播有序廣播

動態(tài)注冊和注銷廣播標(biāo)準(zhǔn)廣播標(biāo)準(zhǔn)廣播一旦發(fā)出來,通常每個接收者都無需等待即可以接收到廣播,接收者相互之間不會有影響。對于這種廣播,是不能被攔截的,接收者無法終止廣播。成為一個廣播接收者要想接收廣播就要成為一個廣播接收者,一個廣播接收者需要繼承自BroadcaseReceiver,重寫OnReceive()方法,當(dāng)注冊的廣播到來時,OnReceive()方法自動被調(diào)用,相關(guān)廣播的信息會被封裝進(jìn)Intent的參數(shù)中。動態(tài)注冊和靜態(tài)注冊廣播要想接收某個廣播,只需要注冊這個廣播成為該廣播的接收者即可。注冊廣播一般有兩種方式,在代碼中注冊稱為動態(tài)注冊,在清單文件AndroidManifest.xml中注冊稱為靜態(tài)注冊。注冊動態(tài)廣播每一種廣播都有一個指定的action動作對應(yīng),動態(tài)注冊廣播通過意圖過濾器IntentFilter添加指定廣播對應(yīng)的action來完成。注銷動態(tài)廣播動態(tài)注冊的廣播接收者要記得取消注冊,一般是在onDestroy()中能過unregisterReceiver()來實(shí)現(xiàn)的。當(dāng)Activity執(zhí)行到onDestroy()時自動注銷廣播。案例設(shè)計本案例實(shí)現(xiàn)用動態(tài)注冊廣播的方式實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)改變的監(jiān)聽。(1)創(chuàng)建一個廣播接收者NetChangeRecv,重寫onReceive()方法。(2)網(wǎng)絡(luò)狀態(tài)的改變信息通過系統(tǒng)廣播發(fā)出來,它對應(yīng)的動作是.conn.CONNECTIVITY_CHANGE,只需要在意圖過濾器中添加該動作,再與廣播接收者注冊綁定即可,當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生改變時,廣播接收者的onReceive會自動運(yùn)行。(3)采用動態(tài)注冊的方式監(jiān)聽(4)在清單文件中添加訪問系統(tǒng)網(wǎng)絡(luò)狀態(tài)改變的靜態(tài)權(quán)限<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>案例實(shí)現(xiàn)演示中……1案例1無網(wǎng)不歡3案例3用廣播傳遞數(shù)據(jù)4案例目錄CONTENTS案例4擊鼓傳花2案例2自動填寫驗證碼案例描述本案例要求編寫程序,實(shí)現(xiàn)自動截取和填寫短信中的6位數(shù)字的驗證碼,要求用靜態(tài)注冊廣播的方式完成。涉及知識點(diǎn)為:靜態(tài)注冊廣播靜態(tài)注冊廣播案例設(shè)計(1)創(chuàng)建一個廣播接收者AutoCodeMsgReceiver,重寫onReceive()方法,在該方法中接收到短信后處理驗證碼的業(yè)務(wù)。(2)在清單文件中靜態(tài)注冊廣播:短信廣播對應(yīng)的動作是:<actionandroid:name="vider.Telephony.SMS_RECEIVED"/>(3)在清單文件中添加接收短信的權(quán)限:uses-permissionandroid:name="android.permission.RECEIVE_SMS"/><uses-permissionandroid:name="android.permission.READ_SMS"/>(4)處理接收短信的運(yùn)行時權(quán)限。Android6.0后接收短信的廣播如果是用靜態(tài)注冊的方式的,同時還要處理運(yùn)行時權(quán)限才可以。案例實(shí)現(xiàn)演示中……1案例1無網(wǎng)不歡2案例2自動填寫驗證碼4案例目錄CONTENTS案例4擊鼓傳花3案例3用廣播傳遞數(shù)據(jù)案例描述使用廣播機(jī)制實(shí)現(xiàn)數(shù)據(jù)傳遞。要求自定義一個廣播發(fā)送者,發(fā)送的廣播能傳遞給廣播接收者。涉及知識點(diǎn)為:通過廣播傳遞數(shù)據(jù)發(fā)送標(biāo)準(zhǔn)廣播并傳遞數(shù)據(jù)發(fā)送標(biāo)準(zhǔn)廣播需要定義好廣播的動作,然后把動作封裝進(jìn)intent,再通過sendBroadcast發(fā)送。標(biāo)準(zhǔn)廣播接收者接收數(shù)據(jù)當(dāng)發(fā)送廣播時,intent所攜帶的數(shù)據(jù)會隨著廣播傳遞到廣播接收者的onReceive的參數(shù)二中,就可以通過各種get的方式取出傳遞過來的值了。案例設(shè)計(1)建立一個SendBroadActivity,主布局里有一個按鈕,用于發(fā)送標(biāo)準(zhǔn)廣播(2)在SendBroadActivity里定義一個靜態(tài)變量ACTION1,值為,用于定義廣播的動作。(3)在按鈕的點(diǎn)擊事件里把a(bǔ)ction封裝進(jìn)intent,再用sendBroadcast(intent)發(fā)送廣播。(4)發(fā)送的intent里攜帶數(shù)據(jù)age=23發(fā)送出去。(5)創(chuàng)建三個廣播接收者,用動態(tài)注冊的方式監(jiān)聽廣播,并接收廣播發(fā)過來的數(shù)據(jù)。案例實(shí)現(xiàn)演示中……1案例1無網(wǎng)不歡2案例2自動填寫驗證碼3案例3用廣播傳遞數(shù)據(jù)案例目錄CONTENTS4案例4擊鼓傳花案例描述本案例要求編程實(shí)現(xiàn)一個有序廣播,并驗證廣播能被截斷。涉及知識點(diǎn)為:有序廣播發(fā)送有序廣播發(fā)送有序廣播用sendOrderBroadcast()方法,該方法接收兩個參數(shù),第一個參數(shù)是Intent,第二個參數(shù)是與權(quán)限有關(guān)的字符串,一般直接填null。設(shè)置廣播的優(yōu)先級發(fā)送有序廣播時,廣播接收者是有先后順序的,在注冊的時候通過設(shè)置優(yōu)先級來進(jìn)行設(shè)定,優(yōu)先級在IntentFilter類里有常量規(guī)定SYSTEM_HIGH_PRIORITY=1000和SYSTEM_LOW_PRIORITY=-1000,優(yōu)先級比較高的廣播接收者可以先收到廣播。截斷廣播優(yōu)先級高的廣播接收者先收到廣播后,可以用abortBroadcast();來截斷廣播,則后面的廣播接收者將無法收到這條廣播。案例設(shè)計(1)建立一個SendOrderBroadActivity,主布局里有一個按鈕,用于發(fā)送有序廣播。(2)在SendOrderBroadActivity里定義一個靜態(tài)變量ORDER_ACTION,值為,用于定義廣播的動作。 (3)在按鈕的點(diǎn)擊事件里把a(bǔ)ction封裝進(jìn)intent,再用sendOrderBroadcast(intent,null)發(fā)送廣播。(4)創(chuàng)建三個廣播接收者,用靜態(tài)注冊的方式監(jiān)聽廣播,設(shè)置不同的優(yōu)先級。(5)運(yùn)行程序驗證是否按優(yōu)先級順序接收到了廣播。(6)在第二個優(yōu)先級的廣播接收者里用abortBroadcast()截斷廣播,驗證后面的廣播接收者收不到廣播。THANKS!案例實(shí)現(xiàn)演示中……總結(jié)本節(jié)主要講解了發(fā)送和接收標(biāo)準(zhǔn)廣播與有序廣播,以案例的方式演示了靜態(tài)注冊和動態(tài)注冊的廣播,接收廣播時同時接收了廣播傳過來的數(shù)據(jù),也進(jìn)行了廣播的攔截。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本節(jié)主要介紹Android四大組件中的Service(服務(wù))。Service用于在后臺執(zhí)行任務(wù)。本節(jié)以案例的形式講解服務(wù)的各種用法。第5章02服務(wù)學(xué)習(xí)目標(biāo)掌握兩種式方啟動和停止服務(wù)掌握Service與Activity之間的通信案例目錄CONTENTS567案例5start方式啟動和停止服務(wù)案例6綁定方式啟動和停止服務(wù)案例7用短信啟動服務(wù)案例目錄CONTENTS67案例6綁定方式啟動和停止服務(wù)案例7用短信啟動服務(wù)5案例5start方式啟動和停止服務(wù)案例描述Service沒有用戶界面,它被創(chuàng)造的目的就是在Activity不可見時仍能執(zhí)行邏輯,它就是不可見的Activity,它是如何啟動和停止的呢?本案例將以Service的Start方式啟動和停止為例,介紹Service的基本用法。涉及知識點(diǎn)為:創(chuàng)建服務(wù)啟動服務(wù)停止服務(wù)Service是什么Service是一個不可見、不和用戶交互的應(yīng)用組件。它不依賴界面,運(yùn)行在進(jìn)程的主線程中,優(yōu)先級高于Activity,不容易被Android系統(tǒng)殺死。一般使用服務(wù)來在后面播放音樂,監(jiān)聽某種動作或者默默的執(zhí)行下載任務(wù)等等。每個Service必須在清單文件中通過<service>來聲明。創(chuàng)建服務(wù)創(chuàng)建服務(wù)通過繼承Service,并重寫onBind()方法來創(chuàng)建,但并沒有啟動服務(wù)。Start方式啟動和停止ServiceService有兩種啟動方式,一種是通過startService()方法啟動的稱為啟動式Service,另一種是通過bindService()方法啟動的稱為綁定式Service。兩個方法都可以啟動Service,但是它們的使用場合有所不同。這里先介紹啟動式Service的啟動和停止。Start方式啟動服務(wù)的生命周期一個服務(wù)采用startService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onStartCommand()方法。

如果調(diào)用startService()方法前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會導(dǎo)致多次創(chuàng)建服務(wù),但會導(dǎo)致多次調(diào)用onStartCommand()()方法。

采用startService()方法啟動的服務(wù),只能調(diào)用stopService()方法結(jié)束服務(wù),服務(wù)結(jié)束時會調(diào)用onDestroy()方法。案例設(shè)計(1)在MainActivity的布局中添加兩個按鈕,一個用于啟動服務(wù),一個用于停止服務(wù)。(2)創(chuàng)建一個類繼承自Service類,重寫服務(wù)的生命周期的方法。(3)在清單文件中注冊服務(wù)。(4)用startService()啟動服務(wù),觀察它的生命周期經(jīng)歷哪些方法。(5)用stopServie()停止服務(wù),觀察它的生命周期經(jīng)歷哪些方法。(6)啟動服務(wù)后多次點(diǎn)擊啟動,觀察它的生命周期經(jīng)歷哪些方法。案例實(shí)現(xiàn)演示中……案例目錄CONTENTS57案例5start方式啟動和停止服務(wù)案例7用短信啟動服務(wù)6案例6綁定方式啟動和停止服務(wù)案例描述本案例實(shí)現(xiàn)Activity上可以指揮Service做具體的事情,比如可以點(diǎn)擊下載和點(diǎn)擊聽音樂。涉及知識點(diǎn)為:綁定方式啟動和停止服務(wù)在Service類中返回服務(wù)要做的代理者要想服務(wù)與Activity建立關(guān)聯(lián),需要在onBind()方法中返回一個IBinder對象。IBinder是一個接口,它有一個實(shí)現(xiàn)類Binder,我們可以寫一個類繼承自Binder,在類中寫要讓服務(wù)執(zhí)行的方法即可。綁定方式啟動和停止ServiceServiceConnection的寫法綁定方式啟動服務(wù)的生命周期一個服務(wù)采用bindService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onBind()方法。采用bindService()方法啟動的服務(wù),調(diào)用unBindService()方法結(jié)束服務(wù),服務(wù)結(jié)束時會調(diào)用onDestroy()方法。兩種啟動方式的選擇使用綁定的方式啟動服務(wù),目的是調(diào)用onBind()方法,這樣在Activity和Service間就建立了關(guān)聯(lián),一般調(diào)用者結(jié)束時服務(wù)也跟著結(jié)束,而用startService方式啟動的話,除非調(diào)用stopService,否則即使調(diào)用者結(jié)束服務(wù)也不會結(jié)束。在實(shí)際開發(fā)中,一般把應(yīng)用程序被關(guān)后扔要執(zhí)行的操作用startService,而把一些只是執(zhí)行特定功能,執(zhí)行時間短且程序關(guān)閉它也要停止的操作放在bindService中。案例設(shè)計(1)在案例5的MainActivity的布局中再添加4個按鈕,一個用于啟動綁定的服務(wù),一個用于停止綁定的服務(wù)。第三個用于啟動下載程序,第三四用于啟動聽音樂程序。(2)改寫MyService類,添加內(nèi)部類MyBinder,類中添加兩個方法,一個用于下載,一下用于聽音樂,只模擬輸出方法被調(diào)用到的信息即可。(3)在MainActivity中實(shí)現(xiàn)ServiceConnection的實(shí)現(xiàn)類,重寫onServiceConnected()方法和onServiceDisconnected()方法,在onServiceConnected()中返回服務(wù)的代理對象。(4)用bindService()啟動服務(wù),unbindServie()停止服務(wù),觀察它的生命周期經(jīng)歷哪些方法。(5)啟動服務(wù)后多次點(diǎn)擊綁定啟動,觀察它的生命周期經(jīng)歷哪些方法。案例實(shí)現(xiàn)演示中……案例目錄CONTENTS56案例5start方式啟動和停止服務(wù)案例6綁定方式啟動和停止服務(wù)7案例7用短信啟動服務(wù)案例描述開發(fā)一個程序,實(shí)現(xiàn)收到短信廣播后能開啟一個后臺服務(wù)。案例設(shè)計(1)創(chuàng)建服務(wù)MyListenerService,普通方式啟動,在onCreate()方法里寫業(yè)務(wù)邏輯代碼。(2)創(chuàng)建廣播接收者M(jìn)yMsgBroadReceiver,收到廣播后啟動服務(wù)。(3)在清單文件中添加接收短信廣播的靜態(tài)權(quán)限和注冊服務(wù)。(4)在MainActivity中添加接收短信廣播的運(yùn)行時權(quán)限。案例實(shí)現(xiàn)演示中……總結(jié)本節(jié)主要講解了啟動式和綁定式服務(wù)的用法,用綁定式服務(wù)可以讓Activity和Service有了關(guān)聯(lián),讓Activity可以直接指揮Service執(zhí)行什么邏輯,為后面章節(jié)的學(xué)習(xí)做好了準(zhǔn)備。THANKS!《Android物聯(lián)網(wǎng)開發(fā)案例式教程》章節(jié)內(nèi)容簡介本章以案例的形式讀取內(nèi)容提供者的數(shù)據(jù),帶領(lǐng)大家進(jìn)入讀取共享數(shù)據(jù)的世界。。第6章內(nèi)容提供者本章學(xué)習(xí)目標(biāo)了解內(nèi)容提供者掌握共享數(shù)據(jù)的訪問讀取系統(tǒng)短信讀取系統(tǒng)聯(lián)系人1案例1讀取系統(tǒng)短信2案例2讀取系統(tǒng)聯(lián)系人案例目錄CONTENTS2案例2讀取系統(tǒng)聯(lián)系人包案例目錄CONTENTS1案例1讀取系統(tǒng)短信案例描述開發(fā)一個程序,用于讀取系統(tǒng)短信,要求用列表的方式顯示,并點(diǎn)擊列表可以刪除某條短信。涉及知識點(diǎn)為:內(nèi)容提供者內(nèi)容解析者內(nèi)容提供者內(nèi)容提供者(ContentProvider)是Android實(shí)現(xiàn)跨進(jìn)程通信的方式,用于在不同的程序之間實(shí)現(xiàn)數(shù)據(jù)共享。它提供了一套外部訪問接口,允許一個程序訪問另一個程序中的數(shù)據(jù),同時用訪問規(guī)則規(guī)定只能對哪一部分?jǐn)?shù)據(jù)進(jìn)行訪問,從實(shí)保證了數(shù)據(jù)的安全。Android系統(tǒng)中自帶的電話聯(lián)系人、短信、媒體庫都提供了外部訪問接口,我們的程序通過這些訪問接口訪問數(shù)據(jù),實(shí)現(xiàn)功能。內(nèi)容解析者每一個應(yīng)用程序想訪問內(nèi)容提供者中的共享數(shù)據(jù),需要通過ContentResolver類,這個類稱為內(nèi)容解析者,通過Content中的getContentResolver()方法可以獲取解析者對象,再通過提供的方法進(jìn)行數(shù)據(jù)的操作。內(nèi)容解析者提供的操作數(shù)據(jù)的方法1插入數(shù)據(jù)的方法,通過Uri進(jìn)行,要插入的值放在ContentValues對象中:更新的方法:更新的方法:內(nèi)容解析者提供的操作數(shù)據(jù)的方法2查詢數(shù)據(jù)的方法:案例設(shè)計(1)主布局中底部一個按鈕用于讀取系統(tǒng)短信,上面是ListView用于顯示短信內(nèi)容。ListView中的列表布局按短信數(shù)據(jù)庫中對應(yīng)的表中的字段來設(shè)置。(2)通過內(nèi)容解析者讀取出短信內(nèi)容,存放在Map集合中,用SimpleAdapter把Map中的內(nèi)容綁定到ListView中的列表布局中。(3)清單文件添加READ_SMS的權(quán)限并處理運(yùn)行時READ_SMS的權(quán)限。(4)利用ListView的條目點(diǎn)擊事件處理短信的刪除。案例實(shí)現(xiàn)演示中…

溫馨提示

  • 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

提交評論