AndroidStudio移動應用開發(fā)高級進階全套教學課件_第1頁
AndroidStudio移動應用開發(fā)高級進階全套教學課件_第2頁
AndroidStudio移動應用開發(fā)高級進階全套教學課件_第3頁
AndroidStudio移動應用開發(fā)高級進階全套教學課件_第4頁
AndroidStudio移動應用開發(fā)高級進階全套教學課件_第5頁
已閱讀5頁,還剩348頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

樣式和主題第一章AndroidStudio移動應用開發(fā)高級進階【ch01】樣式和主題.pptx【ch02】再談Fragment.pptx【ch03】Dialog對話框.pptx【ch04】Notification通知.pptx【ch05】Android支持包的使用.pptx【ch06】自定義組件.pptx【ch07】觸屏事件和基于矩陣的圖像變換.pptx【ch08】使用網(wǎng)絡.pptx【ch09】定位和地圖.pptx【ch10】Android電話控制.pptx【ch11】短消息SMS和多媒體消息服務MMS.pptx【ch12】AndroidNDK開發(fā)入門.pptx【ch13】Android游戲開發(fā)實例.pptx全套可編輯PPT課件01樣式入門我們先通過一個簡單的例子來看看Android是如何定義樣式,以及如何使用定義好的樣式的。新建一個名稱為Ex01StyleTheme01的Android工程。樣式入門這個布局很簡單:一個LinearLayout容器中包含兩個按鈕和一個文本框,并且這三個組件平分LinearLayout的顯示空間。然后修改res/values/strings.xml文件,在其中定義幾個字符串常量資源。樣式入門所定義的三個常量資源,其實就是在布局文件中引用到的三個字符串常量。EX01StyleTheme01程序運行結(jié)果如圖1-1所示。樣式入門比較圖1-1和圖1-2可知,添加樣式前后程序的運行效果不同。樣式入門02定義樣式定義樣式的一般方法為了定義樣式,你需要在res/values工程目錄下新建一個XML文件,當然,你也可以在現(xiàn)有的某個文件下,如styles.xml,直接添加要定義的樣式。可以通過在Java程序中使用R.style.定義樣式名稱來訪問定義的樣式,也可以通過在XML文件中使用@style/自定義樣式名稱來訪問定義的樣式。定義樣式在上述樣式定義中,我們定義了一個名稱為GreenText的樣式,它繼承了Android平臺已定義的名稱為@android:style/TextAppearance的樣式。同時將@android:style/TextAppearance中android:textColor屬性的值修改為#00FF00,也就是將文本字體修改為綠色。定義樣式樣式定義中的可用屬性在樣式定義中可以使用的屬性隨著定義樣式應用目標的不同而不同。例如,定義一個針對TextView組件的樣式和一個針對ImageView的樣式,可以使用的屬性是不相同的。定義樣式因此,在定義樣式時應該針對該樣式的應用目標,參考組件的可用XML屬性來確定可用屬性。一種特殊情況是,如果你將某個樣式定義應用到某個組件,而在這個樣式定義包含應用到的組件不支持的屬性,那么該組件會自動忽略這個不支持的屬性,且不影響其他支持屬性的作用。定義樣式03應用樣式將樣式應用到某個組件將定義好的樣式應用到某個組件是一件非常簡單的工作:在組件的配置中,添加“style”XML配置屬性。例如,將上文定義的GreenText.Small樣式應用到TextView的定義中,只需要加上style屬性即可。應用樣式你可以將樣式應用到具體組件,也可以將樣式應用到容器組件。注意,應用到容器組件的樣式只對這個容器組件有效,對放置于這個容器中的子組件無效。應用樣式將樣式應用到某個Activity或整個應用程序本章的標題是“樣式和主題”,可是到目前為止我們一直沒有介紹什么是主題。那么,到底什么是主題呢?用一句話來說就是,當我們把樣式應用到某個Activity或整個應用程序時,這個樣式就成了主題。應用樣式部分可用于主體樣式的屬性如圖1-5所示。應用樣式04使用Android平臺已定義的樣式和主題Android己定義的典型的樣式根據(jù)不同的AndroidSDK版本,Android自定義了一系列的主題,如下是典型的Android不同版本的主題。API1;API11;API14;API21;兼容包v7中的主題。使用Android平臺已定義的樣式和主題使用主題的注意事項所有能應用于應用程序主題的名稱都是以“Theme.”開頭的。主題名稱不是以“Theme.”開頭的就不是用于應用程序的主題,而是用于某些局部控件的主題。使用Android平臺已定義的樣式和主題很多主題在使用時會報錯,其原因有很多,如窗體必須繼承AppCompatActivity、ActionBarActivity或者FragmentActivity。需要手動指定寬高,需要提升最低API版本,需要使用更高版本的SDK,或者兼容包版本不對等。所以,在使用主題時要特別小心。使用Android平臺已定義的樣式和主題05Android應用程序的主題樣式結(jié)構(gòu)分析介紹完樣式與主題的相關知識,現(xiàn)在回到Android程序,看看Android程序的樣式主題相關內(nèi)容。當你在Android

Studio中新建一個Android工程時,Android已經(jīng)為你制定了默認的主題。Android應用程序的主題樣式結(jié)構(gòu)分析AndroidManifest.xml文件的內(nèi)容如下所示:Android應用程序的主題樣式結(jié)構(gòu)分析06本章同步練習Android平臺預定義了很多主題樣式,請將1.4.1節(jié)中Android已定義的典型的樣式應用到你的一個例子程序中,并觀察每個主題樣式的外觀。本章同步練習感謝觀看再談Fragment第二章AndroidStudio移動應用開發(fā)高級進階01Fragment入門我們通過Fragment實現(xiàn)一個簡單的登錄界面的例子來介紹Fragment的基本用法。程序運行界面如圖2-1所示。Fragment入門首先新建一個Android工程并將其命名為www.ttt.ex02fragment01。再新建一個登錄界面的布局文件并將其命名為layout_login.xml。Fragment入門在activity_main.xml布局文件中,我們將新定義的MyFragment放置到主界面的LinearLayout中。注意,放置Fragment的方式為:使用標簽<fragment>,并通過指定android:name來指定一個Fragment實現(xiàn)類,其他屬性的設置與Android其他組件完全一致。Fragment入門現(xiàn)在的問題是:為什么是這樣的呢?我們在這里只能做一個簡單說明。當Android要顯示MainActivity的界面時,它發(fā)現(xiàn)MainActivity的布局中包含一個Fragment。Fragment入門因此,當它執(zhí)行MainActivity的onCreate方法時,還會執(zhí)行布局中嵌套的Fragment的一系列生命周期方法。其中包括MyFragment的onCreateView生命周期方法,而在MyFragment的onCreateView方法中,我們展開了布局界面,并將展開的布局返回給嵌套了這個Fragment的Activity。Fragment入門進而,MainActivity將顯示這個Fragment的界面。如果要清晰地了解這個過程,就需要對Fragment的生命周期有一個清晰的理解。下面介紹Fragment的生命周期。Fragment入門02Fragment生命周期正如上文所講的,F(xiàn)ragment不能獨立存在,它必須寄生于某個Activity(我們把這個Activity稱為Fragment的父Activity)。Fragment隨父Activity的存在而存在,隨父Activity的消亡而消亡。因此,F(xiàn)ragment的生命周期與其父Activity的生命周期密切相關。Fragment生命周期Fragment生命周期方法和其父Activity生命周期方法的調(diào)用關系如圖2-2所示。Fragment生命周期圖2-2說明,當顯示一個嵌入Fragment的Activity時,Android會執(zhí)行該Activity的生命周期方法。執(zhí)行Activity的onCreate方法時,由于在Activity中嵌入了Fragment,Android會自動執(zhí)行嵌入的Fragment的onAttach方法、onCreate方法、onCreateView方法和onActivityCreate方法。Fragment生命周期類似地,當Android執(zhí)行Activity的onStart方法時,也會自動執(zhí)行嵌入的Fragment的onStart方法。以此類推,當Android執(zhí)行Activity的onDestroy方法時,會自動執(zhí)行嵌入的Fragment的onDestroyView方法、onDestroy方法和onDetach方法。Fragment生命周期下面,我們通過例子來看看Fragment生命周期方法和其父Activity生命周期方法的調(diào)用關系。我們不需要新建工程,直接在2.1節(jié)建立的www.ttt.ex02fragment01工程上做適當修改即可。Fragment生命周期現(xiàn)在運行修改后的ex02fragment01程序,LogCat的輸出信息如圖2-3所示。Fragment生命周期關閉Activity后LogCat的輸出信息如圖2-4所示。Fragment生命周期03本章同步練習一編寫一個簡單的Fragment,在其中顯示一張圖片,然后將這個Fragment嵌入一個Activity中。要求打印該Activity及Fragment的生命周期方法的調(diào)用信息,以加深對Fragment生命周期方法的理解。本章同步練習一04動態(tài)管理FragmentFragment作為一個業(yè)務組件,它可以動態(tài)添加或從Activity中動態(tài)移除。對Fragment的動態(tài)管理是通過FragmentManager來完成的。一個有趣的事實是,在動態(tài)管理Fragment時,需要先從FragmentManager中獲取一個FragmentTransaction事務,然后在這個事務中完成對Fragment的動態(tài)管理。動態(tài)管理Fragment下面我們通過一個例子來說明如何使用FragmentManager及FragmentTransaction對Fragment進行動態(tài)管理。這個例子是顯示一個列表,點擊任何一個列表項,程序?qū)⒏鶕?jù)人們拿手機的模式選擇在Fragment中顯示所選圖片,還是在一個新的Activity中顯示所選圖片。動態(tài)管理Fragment手機處于肖像模式的首界面如圖2-5所示。動態(tài)管理Fragment在手機處于肖像模式時,點擊一個列表項,將在一個新的Activity中顯示對應圖片(見圖2-6)。動態(tài)管理Fragment關閉程序后按“Ctrl+F12”組合鍵,即手機處于風景模式后再運行程序,風景模式下的程序運行效果如圖2-7所示。動態(tài)管理Fragment手機在肖像模式下,主界面只顯示一個列表框。手機在風景模式下,我們在同一個界面中既顯示列表也顯示對應圖片。動態(tài)管理Fragment我們在上述代碼中定義了一個靜態(tài)的公共方法,即newInstance,以便在創(chuàng)建這個Fragment對象時傳遞要顯示的圖片資源的ID參數(shù),并將傳遞進來的參數(shù)保存在該Fragment對象的參數(shù)池中。在該Fragment的onCreateView回調(diào)函數(shù)中,創(chuàng)建了一個用于顯示圖片的ImageView對象以設置要顯示的圖片,并將該ImageView返回給其父Activity。動態(tài)管理Fragment我們?nèi)绾闻袛嗍謾C當前是處于肖像模式還是風景模式呢?當手機處于肖像模式時,布局中是不存在FrameLayout組件的。我們可以利用這點來判斷當前手機的模式,進而采用不同的方式顯示相應圖片。動態(tài)管理Fragment05本章同步練習二在你的計算機上運行2.4節(jié)的程序,并修改該程序,使其實現(xiàn)在顯示圖片時在圖片下面顯示一段對圖片的描述文字。本章同步練習二感謝觀看Dialog對話框第三章AndroidStudio移動應用開發(fā)高級進階01Dialog入門我們通過一個簡單的例子來看看如何通過DialogFragment來實現(xiàn)對話框功能。先顯示一個輸入用戶名和自我介紹的文本框,用戶可通過點擊“發(fā)送”按鈕和“清除”按鈕來發(fā)送信息和清除文本框內(nèi)的信息。Dialog入門運行效果如圖3-1所示。Dialog入門用戶在文本框中輸入內(nèi)容后,點擊“發(fā)送”按鈕將發(fā)送信息(目前沒有實現(xiàn)發(fā)送功能)。用戶點擊“清除”按鈕后,將顯示一個對話框來提示用戶將清除文本框中的內(nèi)容,如圖3-2所示。Dialog入門用戶點擊對話框上的“取消”按鈕,則直接關閉對話框;點擊“確定”按鈕則清除文本框中已經(jīng)輸入的內(nèi)容?,F(xiàn)在構(gòu)建該例子的程序。新建一個名為Ex03Dialog01的Android工程。Dialog入門DialogFragment是Fragment的子類,因此,DialogFragment可以動態(tài)地在一個Activity中顯示出來。但是,DialogFragment是一個為實現(xiàn)對話框功能而設計的特殊的Fragment。Dialog入門因此,DialogFragment類又增加了新的方法,其中show方法和onCreateDialog方法是較為重要的方法:show方法用于顯示構(gòu)建的對話框,onCreateDialog方法則用于構(gòu)建對話框的界面。我們先看看ClearTextDialogFragment類的onAttach回調(diào)函數(shù)。Dialog入門通過第2章的內(nèi)容可知onActivity方法是在Fragment的父Activity創(chuàng)建自身對象時被調(diào)用的,父Activity將自身對象傳遞給Fragment。在ClearTextDialogFragment的onAttach方法中,我們將Activity參數(shù)通過強制轉(zhuǎn)換的方式轉(zhuǎn)換為ClearTextDialogFragmentListener接口。Dialog入門注意ClearTextDialogFragmentListener接口是在ClearTextDialogFragment類中定義的一個內(nèi)部公共接口。父Activity通過實現(xiàn)這個接口來完成用戶點擊對話框相應按鈕時應該實現(xiàn)的操作,這是對話框甚至Fragment與其父Activity進行交互的典型方式,也是Android推薦的最佳編碼實踐。Dialog入門在ClearTextDialogFragment類的onCreateDialog方法中,我們通過AlertDialog的Builder類的對象來構(gòu)建需要的對話框的界面。AlertDialog.Builder提供了一系列用于設置對話框標題、對話框內(nèi)容和對話框按鈕的方法。Dialog入門每個AlertDialog對話框最多可以包括三個按鈕,其分別用AlertDialog.Builder的setPositiveButton、setNegativeButton和setNeutralButton來設置,并且在設置按鈕時也可以設置按鈕的點擊處理函數(shù)。在本章例子的程序中,我們對“確定”按鈕的點擊處理就是通過調(diào)用父Activity的onPositiveDialogClicked方法來清除輸入框的數(shù)據(jù)的,而對“取消”按鈕的點擊處理是通過直接關閉對話框來實現(xiàn)的。Dialog入門02本章同步練習一編寫一個對話框程序,在這個程序的首界面顯示一個按鈕,點擊該按鈕,顯示一個對話框,在對話框中顯示“Hello,Dialog”。本章同步練習一03列表信息選擇對話框列表選擇對話框運行首界面如圖3-3所示。列表信息選擇對話框點擊“你最喜愛的書籍:”后面的“…”按鈕后顯示的多選列表對話框如圖3-4所示。列表信息選擇對話框選中相應的復選框并點擊“確定”按鈕,即可顯示圖3-5所示多選結(jié)果。列表信息選擇對話框點擊“你最喜愛的食物:”后面的“…”按鈕,即可顯示圖3-6所示單選列表對話框。列表信息選擇對話框選擇相應的單選按鈕并點擊“確定”按鈕,即可顯示圖3-7所示單選結(jié)果。列表信息選擇對話框注意,<string-arrayname="字符串數(shù)組的名稱">可用于定義字符串數(shù)組,定義的這個字符串數(shù)組在XML文件和Java程序中可以通過如下方式來應用。①在Java程序中的方式是R.array.字符串數(shù)組名稱;②在XML文件中的方式是@array/字符串數(shù)組名稱。列表信息選擇對話框為了顯示書籍選擇多選列表對話框,我們需要構(gòu)建一個DialogFragment的子類。為了便于管理,我們在SrC目錄下的com.ttt.ex03dialog02包下,新建一個名為com.ttt.ex03dialog02.dialog的子包,并在其下新建一個名為BooksDialogFragment的Java類。列表信息選擇對話框在BooksDialogFragment類的onAttach回調(diào)函數(shù)中,我們先將參數(shù)activity強制轉(zhuǎn)換為BooksDialogFragmentListener接口對象。以便用戶點擊對話框上的“確定”按鈕后調(diào)用接口方法在父Activity中顯示所選信息。列表信息選擇對話框由于食物列表框是單選列表框,所以使用Builder.setSingleChoiceItems來設置食物單選列表,其他各項功能與BooksDialogFragment類似,不再贅述。當然,最后還需要修改MainActivityjava程序,使之顯示主界面、監(jiān)聽主界面按鈕的點擊情況,并實現(xiàn)BooksDialogFragmentListener和FoodDialogFragmentListener接口,從而實現(xiàn)在對話框操作結(jié)束后顯示所選信息。列表信息選擇對話框04本章同步練習二編寫一個對話框程序,在這個程序的首界面上顯示一個文本框和一個按鈕,點擊該按鈕即可顯示一個顏色選擇對話框。用戶選擇某一顏色并點擊“確定”按鈕后,首界面文本框內(nèi)的字體顏色即可設置為選中的顏色。本章同步練習二感謝觀看Notification通知第四章AndroidStudio移動應用開發(fā)高級進階01Notification使用入門先看一個簡單的例子。在這個例子程序中,我們將構(gòu)建一個BroadcastReceiver來接收對系統(tǒng)日期的修改。并通過Notification來提示用戶系統(tǒng)日期的變更,當用戶拉開該Notification并點擊顯示按鈕時,將在一個Activity中告知用戶系統(tǒng)日期被變更。Notification使用入門程序運行效果如圖4-1所示,其中,左上角的時鐘圖標就是在用戶修改了系統(tǒng)日期后程序?qū)@示的一個Notification。Notification使用入門拉開該Notification,將顯示Notification詳細信息,如圖4-2所示。Notification使用入門點擊該Notification的任何地方,都將啟動一個Activity,并顯示“日期被修改了”(見圖4-3)。Notification使用入門現(xiàn)在構(gòu)建該程序。新建一個名為Ex04Notification01的Android工程。為了接收系統(tǒng)日期變更的廣播信息,我們需要實現(xiàn)一個BroadcastReceiver。先在src目錄下新建一個名為com.ttt.ex04notification01.bcreceiver的包,并在該包下新建一個名為DateChangedReceiver的Java類。Notification使用入門DateChangedReceiver是一個BroadcastReceiver,當系統(tǒng)日期變更時將被Android自動執(zhí)行。在onReceive方法中,先實例化一NotificationCompatible.Builder對象,實例化NotificationCompatible.Builder對象的目的是方便構(gòu)建Notification對象。Notification使用入門當然,你也可以直接實例化Notification對象。通過得到的mBuilder對象來設置目的Notification的各個屬性。包括title、LargeIcon、text、info、SmallIcon、when(Notification發(fā)生的時間)和Notification發(fā)生時的音效,并設置用戶拉開并點擊該Notification后,該Notification被關閉。Notification使用入門為了在用戶拉開并點擊Notification時系統(tǒng)執(zhí)行預設的動作,應打開一個新的Activity來告知用戶系統(tǒng)日期變更,創(chuàng)建一個Intent對象,指明打開MainActivity。為什么要將這個Intent對象封裝到PendingIntent對象中去呢?當Notification顯示出來時,根本無法預知用戶什么時候拉開并點擊該Notification。Notification使用入門因此,無法預知與該Notification關聯(lián)的動作什么時候會被執(zhí)行。在此期間如果系統(tǒng)的日期又發(fā)生了改變,我們該如何管理這些Intent對象呢?這就是需要PendingIntent的原因,將Intent對象封裝PendingIntent對象中,可以對未來的Intent進行管理。Notification使用入門02本章同步練習一編寫一個Notification程序。當用戶點擊主界面上的某個按鈕時,創(chuàng)建并顯示一個Notification;當用戶拉開并點擊該Notification時,在一個新的Activity中顯示一段文字信息。本章同步練習一03管理NotificationNotificationManager是Notification管理器,通過NotificationManager對象可以對Notification進行管理,包括通過它添加和取消一個或多個Notification。通過語句:context.getSystemService(Context.NOTIFICATION_SERVICE)可以獲取NotificationManager對象。管理Notification只要獲取了一個NotificationManager對象,通過調(diào)用該對象的notify(intnid,Notificationnotification)即可顯示一個Notification。通過調(diào)用其cancel(intnid)即可取消一個已經(jīng)存在的Notification。管理Notification04使用Notification顯示任務進度我們經(jīng)常需要在程序中顯示某個在后臺工作的任務的進度。例如,下載某個資源的進度,進行某個運算的進度。這時我們可以采用Notification來顯示這些后臺任務的進度。使用Notification顯示任務進度工作進度有兩種情形:可預知的進度和不可預知的進度。可預知的進度,是指我們知道任務所完成的百分比。例如,在某個資源下載中,如果我們知道該資源的大小,也知道當前已經(jīng)下載的數(shù)據(jù)大小,那么該任務的進度是可預知的;否則,該任務的進度是不可預知的。使用Notification顯示任務進度下面我們通過舉例來說明如何使用Notification顯示工作進度。為了說明進度可預知和進度不可預知的任務,我們將分別模擬進度可預知的后臺任務線程和進度不可預知的后臺任務線程。使用Notification顯示任務進度在進度可預知的情況下,程序運行的效果如圖4-4和圖4-5所示。使用Notification顯示任務進度在進度不可預知的情況下,程序運行情況如圖4-6和圖4-7所示。使用Notification顯示任務進度現(xiàn)在構(gòu)建該程序。新建一個名為Ex04Notification02的Android工程。先修改res/layout/activity_main.xml布局文件,該文件包含兩個用戶啟動模擬后臺任務的按鈕,一個按鈕用于啟動可預知進度的任務,另一個按鈕用于啟動不可預知進度的任務。使用Notification顯示任務進度在可預知進度的DeterminedTask任務中,我們假設線程要運行50秒,因此,在其run方法中,我們通過for循環(huán)來實現(xiàn)每5秒使用setProgress方法修改一次Notification進度。循環(huán)結(jié)束后,通過setProgress(0,0,false)函數(shù)告知Notification進度完成。使用Notification顯示任務進度在不可預知進度的InDeterminedTask任務中,我們通過隨機數(shù)生成器生成一個動態(tài)的時間。通過setProgress(0,0,true)函數(shù)告知Notification進度是不可預知的,然后使線程睡眠,睡眠結(jié)束后,使用setProgress(0,0,false)函數(shù)告知Notification任務完成。使用Notification顯示任務進度05本章同步練習二利用Notification實現(xiàn)一個鬧鈴程序,主界面可以設置鬧鈴的時間,啟動鬧鈴后一旦到達設定時間就發(fā)出提醒,提醒需要有特別效果:聲音、震動、燈光。本章同步練習二感謝觀看第五章AndroidStudio移動應用開發(fā)高級進階Android支持包的使用01Android支持包總覽到目前為止,Android提供了v4支持包、v7支持包、v8支持包、v13支持包和v17支持包。Android對支持包進行版本編號,是因為Android提供的支持包必須在高于特定的Android版本(APILevel)上才能使用。Android支持包總覽例如,v4支持包只能在版本號大于或等于Android1.6(API4)的Android系統(tǒng)上才能使用。v7支持包只能在版本號大于或等于Android2.1(API7)的Android系統(tǒng)上才能使用等。Android支持包總覽Android支持包的特性如表5-1所示,各個支持包提供的全部類可參考Android的幫助文檔。Android支持包總覽其中v4支持包提供的支持類最多,這些支持類也是最常用的。例如,F(xiàn)ragment是Android3.0(API11)提供的功能,為了在Android1.6(API4)中使用Fragment,必須使用v4支持包中的Fragment,不能使用系統(tǒng)自身的Fragment類。因為在Android1.6(API4)中根本就沒有Fragment類;ActionBar也是Android

3.0(API11)提供的功能,由于ActionBar支持類不是v4支持包提供的,而是v7支持包提供的,所以ActionBar不能用于Android1.6(API4)。Android支持包總覽由于Android版本的問題,在編寫Android程序時必須在應用程序的功能和支持設備的廣泛性間進行平衡。程序使用的平臺SDK提供的功能越多,應用程序支持設備的廣泛性越??;應用程序支持設備廣泛性越大,程序使用的平臺SDK功能越受限,且程序只能使用支持包中提供的功能,或者自行編寫需要的功能。Android支持包總覽02下載Android支持包AndroidSDKManager窗口如圖5-1所示。下載Android支持包確?!癊xtras”選項下的“AndroidSupportRepository”和“AndroidSupportLibrary”的狀態(tài)是“Installed”,若不是,則選中這兩項的復選框,并單擊“Installpackages…”按鈕進行安裝。安裝完成后,就可以在應用程序中使用AndroidSupport

Repository和AndroidSupportLibrary了。下載Android支持包03使用支持包的ViewPager實現(xiàn)多屏滑動切換ViewPager是v4支持包提供的容器組件,它允許用戶通過滑動動作來實現(xiàn)多個屏幕間的切換。ViewPager一般與Fragment配合使用,且必須通過實現(xiàn)PagerAdapter接口為ViewPager提供要顯示的界面。使用支持包的ViewPager實現(xiàn)多屏滑動切換為了便于程序開發(fā)人員使用,Android提供了兩個實現(xiàn)了PagerAdapter的子類:FragmentPagerAdapter和FragmentStatePagerAdapter。在ViewPager中可以顯示Title類型的標題或Tab類型的標題,用以表示當前活動界面。本節(jié)我們將通過例子來介紹ViewPager的使用。使用支持包的ViewPager實現(xiàn)多屏滑動切換程序運行初始界面如圖5-2所示。使用支持包的ViewPager實現(xiàn)多屏滑動切換滑動界面上方的標題欄,程序?qū)⒏鶕?jù)滑動方向以動畫的形式顯示前一張或后一張圖片,圖片切換過程如圖5-3所示。使用支持包的ViewPager實現(xiàn)多屏滑動切換滑動完成,則顯示相應的圖片,滑動完成界面如圖5-4所示。使用支持包的ViewPager實現(xiàn)多屏滑動切換使用ViewPager的一般步驟ViewPager是常見的容器組件,被廣泛用在需要多屏切換的應用中。PagerTabStrip和PagerTitleStrip為了使ViewPager顯示標題欄,可以使用PagerTabStrip或PagerTitleStrip,那么這兩個Strip有什么區(qū)別呢?使用支持包的ViewPager實現(xiàn)多屏滑動切換FragmentPagerAdapter和FragmentPagerStateAdapter從編程角度來看,F(xiàn)ragmentPagerAdapter與FragmentPagerStateAdapter沒有任何區(qū)別。它們的區(qū)別僅僅體現(xiàn)在運行效率和對內(nèi)存的使用上。使用支持包的ViewPager實現(xiàn)多屏滑動切換FragmentPagerAdapter管理的Fragment對象總是保存在內(nèi)存中,這種情況下,進行界面切換將有更高的運行效率,但是會占用更多的內(nèi)存空間。FragmentPagerStateAdapter正好與此相反,它只將部分正在顯示的Fragment保存在內(nèi)存中,并且在必要時會銷毀Fragment,因此,F(xiàn)ragmentPagerStateAdapter有更好的內(nèi)存使用效率和可能較低的運行效率。使用支持包的ViewPager實現(xiàn)多屏滑動切換04本章同步練習一編寫一個含有ViewPager的用于界面切換的程序,要求包括10個界面。其中幾個界面用于顯示文本、幾個界面用于顯示圖片和一個界面包含ListView,并在Android2.2和Android4.x上進行測試,觀察運行效果。本章同步練習一05使用支持包的SlidingPaneLayout實現(xiàn)雙欄滑動SlidingPaneLayout是v4支持包提供的一個常用的容器組件,它實現(xiàn)了主導航面板和內(nèi)容面板間的滑動切換。在程序中可以實現(xiàn)SlidingPaneLayout.PanelSlideListener接口從而監(jiān)聽面板的滑動過程。使用支持包的SlidingPaneLayout實現(xiàn)雙欄滑動程序運行首界面如圖5-7所示。使用支持包的SlidingPaneLayout實現(xiàn)雙欄滑動點擊左側(cè)列表中的任何一個選項,右側(cè)區(qū)域都會顯示相應顏色,程序運行效果如圖5-8所示。使用支持包的SlidingPaneLayout實現(xiàn)雙欄滑動同時,可以向左滑動右側(cè)區(qū)域使之占據(jù)全部顯示空間,也可以向右滑動右側(cè)區(qū)域使左側(cè)列表顯示出來(見圖5-9)。使用支持包的SlidingPaneLayout實現(xiàn)雙欄滑動06本章同步練習二編寫一個使用SlidingPaneLayout組件的程序,在左邊欄顯示一些常見網(wǎng)站的名稱,點擊左邊欄中的網(wǎng)站名稱,右邊欄即可通過WebView組件顯示相應網(wǎng)站的頁面信息。本章同步練習二感謝觀看第六章AndroidStudio移動應用開發(fā)高級進階自定義組件01自定義組件的一般方法Android的組件框架為自定義組件提供了非常大的便利:Android的任何組件都是View組件的子類。因此,自定義組件只需擴展View組件或其子類,并覆蓋相應的方法即可。自定義組件的一般方法擴展View類或其子類。在程序中使用自定義的組件。自定義組件的一般方法如下所示:覆蓋從其父類繼承的方法。自定義組件的一般方法02基于View的完全自定義組件完全自定義組件就是直接繼承View類,并通過覆蓋相應的名稱以“on”開頭的方法來完全定制組件的外觀、響應事件的處理等。我們通過例子來看看如何完全自定義一個組件:一個簡單的時鐘組件。基于View的完全自定義組件自定義時鐘組件的界面效果如圖6-1所示?;赩iew的完全自定義組件03本章同步練習一修改6.2節(jié)中的MyClock組件,在時針的刻度盤上顯示各個刻度的時間值。提示:使用Canvas類的drawText方法繪制文本信息,同時使用Canvas類的rotate方法旋轉(zhuǎn)畫布,以避免復雜的坐標計算。本章同步練習一04改進Android已有組件如果Android已經(jīng)存在一個與你期望的組件在外形或功能上相差不大的組件,那么你可以改進這個組件來滿足你的需要。我們通過一個簡單的例子來說明如何改進Android現(xiàn)有組件,以滿足自己的要求。改進Android的TextView,使TextView顯示的文字有一條下畫線。改進Android已有組件改進后的TextView運行效果如圖6-2所示。改進Android已有組件05組合Android組件以形成復合組件建議使用Fragment組合已有組件進而形成復合組件。關于這個問題可以參考本書第2章內(nèi)容,在此不再贅述。組合Android組件以形成復合組件06本章同步練習二繼續(xù)6.3節(jié)本章同步練習一的內(nèi)容,編寫一段程序?qū)崿F(xiàn)以下內(nèi)容:用修改后的MyClock組件、6.4節(jié)中修改后的MyTextView組件。以及兩個按鈕布局一個新的界面,并用MyTextView組件顯示一段文字,兩個按鈕分別用于啟動及停止時針運行。本章同步練習二07基于SurfaceView的自定義組件在介紹基于View的自定義組件時,我們要求界面UI的繪制都必須在onDraw回調(diào)方法中完成。這意味著基于View的自定義組件不能在單獨的非UI線程中繪制界面UI,這種限制不能滿足對界面變化需要進行快速響應和實時響應的應用,如游戲應用。基于SurfaceView的自定義組件為了處理界面的實時繪制,并達到在非UI線程中繪制界面UI的目的,AndroidSDK提供了更為高效的SurfaceView組件?;赟urfaceView的自定義組件即可滿足對界面UI的實時繪制要求?;赟urfaceView的自定義組件理解SurfaceView如何理解SurfaceView呢?為了使用SurfaceView及其子類,需要先理解Surface的概念。從本質(zhì)上講,Surface是屏幕顯示緩沖區(qū),也就是,在Surface上繪制的任何內(nèi)容都能夠直接顯示到手機屏幕上?;赟urfaceView的自定義組件為了有效地管理和使用每個SurfaceView對應的Surface,即為了避免多個線程同時在Surface上繪制。SurfaceView提供了一個控制器SurfaceHolder,通過SurfaceHolder可以實現(xiàn)對Surface的有序使用。基于SurfaceView的自定義組件一個簡單的SurfaceView的例子我們編寫一個簡單的基于SurfaceView自定義組件的例子,這個例子可以實現(xiàn)以動畫的方式顯示一個由小到大逐漸變化的圓?;赟urfaceView的自定義組件SurfaceView自定義組件運行界面如圖6-3所示?;赟urfaceView的自定義組件使用基于內(nèi)存的SurfaceView繪制技術在默認情況下,SurfaceView是基于雙緩沖的,也就是,每次用SurfaceHolder.lockCanvas來獲取基于Surface的畫布時,Android 都會自動對兩個畫布進行輪流使用。雙緩沖技術可以有效提升繪制效率和顯示效率,但是,有時會出現(xiàn)閃屏現(xiàn)象?;赟urfaceView的自定義組件運行該程序,界面將快速連續(xù)地顯示數(shù)字(見圖6-4)?;赟urfaceView的自定義組件08本章同步練習三編寫一個基于SurfaceView的程序,要求該程序?qū)崿F(xiàn):通過按鍵控制屏幕上小人上、下、左、右連續(xù)移動。本章同步練習三感謝觀看第七章AndroidStudio移動應用開發(fā)高級進階觸屏事件和基于矩陣的圖像變換01觸屏事件基礎Android是通過MotionEvent對象對觸屏事件進行封裝的。封裝在MotionEvent中的觸屏事件信息包括事件類型、觸點指針信息、觸屏點的坐標、觸點的壓力等。觸屏事件基礎其中,通過MotionEvent的getX方法及getY方法即可獲取觸屏點的坐標,通過getPressure方法即可獲取觸點的壓力。這些內(nèi)容都比較簡單,但是事件類型和觸點指針信息有點復雜,下文將對它們進行仔細介紹。觸屏事件基礎每個觸及觸屏設備的手指(指針)包括兩個信息:指針I(yè)D和指針索引。其中,指針I(yè)D是手指觸及觸屏設備時,系統(tǒng)自動為每個手指分配一個唯一的ID,這個ID從手指觸及觸屏設備到手指完全提起的整個過程都保持不變。觸屏事件基礎02觸屏事件基礎舉例對于任何一個組件,我們都可以通過調(diào)setOnTouchListener來監(jiān)聽觸屏事件,并在OnTouchListener接口的onTouch函數(shù)中對觸屏事件進行處理。在這個例子中,我們在Activity中顯示一個空的LinearLayout界面,并使該LinearLayout監(jiān)聽觸屏事件,然后我們連續(xù)用不同的手指不斷觸及屏幕,移動或提起手指,并在LogCat中打印監(jiān)聽到的觸屏事件信息。觸屏事件基礎舉例運行該例子,觸屏事件處理運行例子主界面如圖7-1所示(因為模擬器不支持多點觸摸,你需要在真實手機上運行該例子)。觸屏事件基礎舉例首先,在觸屏上按下第一個手指,由于很難控制按下的手指不再移動,所以,在顯示按下手指后會顯示手指在移動,如圖7-2所示。觸屏事件基礎舉例程序正確地監(jiān)聽到了第一個手指按下的事件,輸出的信息中包括指針索引、指針I(yè)D、觸點坐標x和y的值、按下的壓力及手指觸及的面積大小,然后提起手指,顯示如圖7-3所示信息。觸屏事件基礎舉例程序能夠正確監(jiān)聽到第一個手指提起的事件。現(xiàn)在按下第一個手指后,再按下第二個手指,顯示如圖7-4所示信息。觸屏事件基礎舉例從圖7-4中可以清晰地看到監(jiān)聽到的兩個手指按下的事件?,F(xiàn)在提起第一個手指再提起第二個手指,顯示如圖7-5所示信息。觸屏事件基礎舉例03本章同步練習一將7.2節(jié)的例子加載到你的開發(fā)環(huán)境中并運行,按下手指、移動手指、提起手指、多個手指按下、多個手指移動、多個手指提起,觀察LogCat輸出的信息,以加深對觸屏事件的理解。本章同步練習一04通過觸屏事件滑動組件通過觸屏滑動組件例子的運行首界面如圖7-6所示,通過手指滑動組件即可顯示被遮蓋的內(nèi)容。通過觸屏事件滑動組件通過手指滑動組件(在模擬器上用鼠標滑動組件),顯示如圖7-7所示界面。通過觸屏事件滑動組件你可以繼續(xù)滑動,甚至可以將組件滑動到屏幕外,如圖7-8所示。通過觸屏事件滑動組件通過這個例子我們可以看出,自定義組件的可顯示區(qū)域是不受物理屏幕空間限制的。也就是說,你可以顯示該組件大小區(qū)域以外的畫布內(nèi)容,也可以通過程序的控制邏輯限制組件被滑動到組件顯示內(nèi)容之外。通過觸屏事件滑動組件05本章同步練習二修改7.4節(jié)中LargeView組件,使之在滑動時不可超過其顯示區(qū)域。提示:使用getScrollX獲取組件當前滾動的偏移,該值小于0則表示超出了左邊界,該值大于某個值(請讀者思考)則表示超出了右邊界。本章同步練習二06使用基于矩陣的圖像變換我們在布局中顯示一個ImageView組件,在配置ImageView的scaleType屬性時,有一個matrix類型的參數(shù)值,如圖7-9所示。使用基于矩陣的圖像變換matrix縮放類型,即可以使用矩陣對該圖像進行變換處理。那么矩陣到底是什么呢?數(shù)學上,矩陣可以用于表示二維表。例如,全班40個同學的5門功課的成績,華為各款手機2010一2019年的售價等數(shù)據(jù)都可以使用二維矩陣表示。使用基于矩陣的圖像變換矩陣除了具有這些表示數(shù)據(jù)信息的功能,還是進行數(shù)據(jù)變換的有力工具。我們在此不對與矩陣有關的數(shù)學知識進行介紹,只介紹如何使用矩陣進行圖像變換。因為矩陣可以用于數(shù)據(jù)變換,而圖像就是一些數(shù)據(jù),所以,使用矩陣對圖像數(shù)據(jù)進行變換也就順理成章了。使用基于矩陣的圖像變換Android為了方便程序設計人員使用矩陣進行圖像變換,專門設計了名為Matrix的Java類。需要注意的是,Android的Matrix類只能是一個3×3的矩陣。用這個矩陣,可以方便地完成圖像縮放、旋轉(zhuǎn)、平移和扭曲的變換。使用基于矩陣的圖像變換07本章同步練習三在開發(fā)環(huán)境中運行7.6節(jié)的例子程序,并完善其功能,實現(xiàn)使用兩個手指旋轉(zhuǎn)圖像。具體操作過程是,固定一個手指不動,旋轉(zhuǎn)另一個手指,使圖像隨著旋轉(zhuǎn)的手指而旋轉(zhuǎn)。本章同步練習三提示:為了完成這個功能,需要先判斷用戶的意圖是縮放還是旋轉(zhuǎn)。縮放主要是手指間距離的變化,旋轉(zhuǎn)則主要是手指間角度的變化。因此,我們在MotionEvent的ACTION_MPVE事件中,需要先判斷手指間的角度是否發(fā)生了明顯的變化,若是則作為旋轉(zhuǎn)操作;否則作為縮放操作。本章同步練習三感謝觀看第八章AndroidStudio移動應用開發(fā)高級進階使用網(wǎng)絡01使用ConnectivityManager管理網(wǎng)絡狀態(tài)在可以使用網(wǎng)絡進行數(shù)據(jù)通信前,需要先獲取網(wǎng)絡的狀態(tài)。例如,當前網(wǎng)絡是否是連通的,連接方式是Wi-Fi、GPRS還是UMTS。為了達到這些目的,我們需要使用AndroidSDK提供的ConnectivityManager類。使用ConnectivityManager管理網(wǎng)絡狀態(tài)02使用HttpURLConnection訪問網(wǎng)絡HttpURLConnection支持HTTP中規(guī)定的所有請求方式,基于上文介紹的編程過程,可以使用GET、POST、HEAD、OPTION、DELETE、TRACE方式向服務器發(fā)送請求。其中,最常用的是GET請求和POST請求,下文將對使用GET方法和POST方法發(fā)送請求并處理響應數(shù)據(jù)進行介紹。使用HttpURLConnection訪問網(wǎng)絡使用HttpURLConnection的GET方法獲取圖片使用GET方法獲取服務器圖片的運行首界面,如圖8-3所示。使用HttpURLConnection訪問網(wǎng)絡使用HttpURLConnection的POST方法獲取圖片現(xiàn)在我們演示如何使用HttpURLConnection的POST方法從服務器上獲取圖片,程序的運行效果不變。我們只需要修改downLoadImageAndShow函數(shù),使之使用POST方法來獲取圖片數(shù)據(jù)即可。使用HttpURLConnection訪問網(wǎng)絡03本章同步練習一仿照8.2節(jié)的例子,使用基于Java的多線程機制,即Thread機制,完成與8.2節(jié)的例子程序類似的功能。要求:在程序界面中可以選擇使用GET方法或POST方法獲取圖片。本章同步練習一04使用OkHttp訪問網(wǎng)絡使用OkHttp的一般過程為了使用OkHttp,你需要從OkHttp官網(wǎng)http://square.github.io/okhttp/下載最新OkHttp包和Okio包。將它們放置到工程的App/libs目錄下,逐一右擊各個包并在彈出的菜單中選擇AddasLibrary”。使用OkHttp訪問網(wǎng)絡使用GET方法進行服務請求8.4.1小節(jié)介紹的方式其實就是使用GET方法進行HTTP請求。使用POST方法進行服務請求POST請求可以將普通字符串、文件、表單等多種格式的請求數(shù)據(jù)發(fā)送到服務器端程序。使用OkHttp訪問網(wǎng)絡設置請求頭及提取響應頭配置OkHttp超時典型的HTTP請求頭是一個Map<String,String>:每個字段都有一個值或沒有值,也有一些請求頭允許有多個值。在請求沒有響應時使用超時結(jié)束call函數(shù)。使用OkHttp訪問網(wǎng)絡05圖片獲取示例的OkHttpGET實現(xiàn)下面我們通過一個具體的例子來解釋如何使用OkHttp的GET方法(即HTTP的GET方法請求)來與服務器端程序進行HTTP通信。繼續(xù)使用8.2節(jié)點擊按鈕顯示相應圖片的例子。圖片獲取示例的OkHttpGET實現(xiàn)06圖片獲取示例的OkHttpPOST實現(xiàn)與GET方法將請求參數(shù)放置在URL地址中不同的是,OkHttp的POST方法將發(fā)送給服務器端程序的請求參數(shù)放置在請求數(shù)據(jù)體中。理論上,采用POST方法可以將任何格式的數(shù)據(jù)發(fā)送給服務器端程序。圖片獲取示例的OkHttpPOST實現(xiàn)07本章同步練習二通過HttpClient并使用GET方法從任意一個公共網(wǎng)站,如,請求一個頁面,并將得到的HTML頁面顯示在WebView組件中。本章同步練習二08使用Multipart傳遞請求數(shù)據(jù)到服務器端程序MultipartForm可以將包含文件流的請求數(shù)據(jù)傳遞到服務器端。例如,在一個注冊程序中,需要將包括頭像在內(nèi)的注冊信息傳遞到服務器端程序時,則需要使用Multipart請求體。使用Multipart傳遞請求數(shù)據(jù)到服務器端程序09本章同步練習三編寫一個使用OkHttp進行網(wǎng)絡信息注冊的簡單的程序,包括客戶端程序和服務器端程序,注冊的信息包括姓名、出生日期、密碼、電話號碼和頭像。你可以使用任何自己熟悉的方式發(fā)送數(shù)據(jù),但是由于請求數(shù)據(jù)中包含有頭像,只能使用POST請求發(fā)送數(shù)據(jù)。本章同步練習三10使用JSON格式的數(shù)據(jù)與服務器端通信JSON基礎什么是JSON?如何使用JSON表示數(shù)據(jù)?JSON,即JavaScriptObjectNotation,是一種輕量級的數(shù)據(jù)交換格式,它用“名/值”對表示數(shù)據(jù)。使用JSON格式的數(shù)據(jù)與服務器端通信在JavaScript中使用JSON數(shù)據(jù)JSON是JavaScript支持的原生數(shù)據(jù)格式,因此,在JavaScript中使用JSON數(shù)據(jù)非常簡單。進而可以使用“變量名.屬性名”或“變量名[下標]”的方式訪問JSON數(shù)據(jù)。使用JSON格式的數(shù)據(jù)與服務器端通信在Java中使用JSON數(shù)據(jù)Java并不直接支持JSON數(shù)據(jù),在Java中,任何一個JSON數(shù)據(jù)都被看作一個字符串,稱為JSON串。通過使用第三方提供的Jar包,可以將JSON串轉(zhuǎn)換為Java的對象,也可以將Java對象轉(zhuǎn)換為JSON串。使用JSON格式的數(shù)據(jù)與服務器端通信使用POST請求及JSON數(shù)據(jù)格式發(fā)送請求下面我們通過一個具體的例子來介紹如何使用HTTP的POST方法和JSON數(shù)據(jù)格式來與服務器端程序進行HTTP通信。繼續(xù)使用8.2節(jié)點擊按鈕顯示相應圖片的例子。使用JSON格式的數(shù)據(jù)與服務器端通信感謝觀看第九章AndroidStudio移動應用開發(fā)高級進階定位和地圖01使用百度定位SDK定位位置百度定位SDK利用設備當前的GPS信息(GPS定位)、基站信息(基站定位)和Wi-Fi信息(Wi-Fi定位)完成定位。開發(fā)者在應用中成功集成百度定位SDK后,即可通過定位SDK的接口向百度定位服務請求位置信息。使用百度定位SDK定位位置定位SDK根據(jù)設備當前實際情況(如是否開啟GPS、是否連接網(wǎng)絡、是否掃描到Wi-Fi信息等)生成定位依據(jù)。并根據(jù)開發(fā)者設置的實際定位策略(包括高精度模式、低功耗模式、僅用設備模式)進行定位。使用百度定位SDK定位位置在使用百度定位組件前,你需要進入http:///index.php?title=android-locsdk/guide/create-project/key頁面,按該頁面引導申請百度網(wǎng)絡服務的相關Key。你也可以使用搜索引擎搜索“百度地圖API”找到這個頁面。使用百度定位SDK定位位置從http:///index.php?title=sdk/download&action#selected=location_all頁面下載百度Android定位SDK。Android定位SDK自V7.0版本起,按照附加功能不同向開發(fā)者提供了四種不同類型的定位開發(fā)包,根據(jù)實際需求選擇所需類型的開發(fā)包即可。我們選擇功能最齊全的“全量定位”開發(fā)包。使用百度定位SDK定位位置在這個頁面上,還可以下載與使用百度Android定位SDK相關的示例代碼,百度Android定位SDK下載頁面如圖9-1所示。使用百度定位SDK定位位置如圖9-2所示,右擊BaiduLBS_Android.jar文件,在彈出的菜單中選擇“AddasLibrary”。使用百度定位SDK定位位置在程序的onCreate回調(diào)函數(shù)中,顯示主界面并獲取TextView組件的應用。然后,創(chuàng)建mLocationClient對象和監(jiān)聽接口對象,并設置定位的相關參數(shù)。使用百度定位SDK定位位置百度手機地圖使用的是bd09l1格式的定位結(jié)果,為了配合配置地圖,我們設置定位結(jié)果信息為“bd0911”。在Activity的onResume回調(diào)函數(shù)中,啟動定位程序并請求定位信息;同時,在 onPause回調(diào)函數(shù)中,停止定位。使用百度定位SDK定位位置百度地圖使用異步方式進行定位,因此,需要編寫自己的定位監(jiān)聽接口MyLocationListener來監(jiān)聽定位結(jié)果。一旦得到定位結(jié)果,系統(tǒng)將調(diào)用這個接口的onReceiveLocation方法,在這個方法中,根據(jù)得到的定位結(jié)果BDLocation類的對象,我們可以獲取定位相關信息。使用百度定位SDK定位位置02使用百度地圖SDK顯示地圖上一節(jié)案例我們使用的是百度定位SDK,它僅僅能夠讓我們獲取定位位置信息,如果需要在應用中展現(xiàn)地圖,則需要與百度地圖AndroidSDK結(jié)合。百度地圖AndroidSDK是一套基于Android2.1及以上版本設備的應用程序接口,使用該SDK可以開發(fā)適用于Android系統(tǒng)移動設備的地圖應用。使用百度地圖SDK顯示地圖下載百度地圖AndroidSDK在上一節(jié)中已有介紹,在頁面提供的資源列表中選擇“基礎地圖”選項,然后單擊“下載開發(fā)包”按鈕下載。注意,上一節(jié)我們申請的Key可以繼續(xù)使用。使用百度地圖SDK顯示地圖百度Android地圖SDK下載頁面如圖9-3所示。使用百度地圖SDK顯示地圖下面我們通過一個簡單的例子來說明如何使用百度地圖AndroidSDK。新建一個名為Ex09LocationMap02的Android工程,并將與百度地圖AndroidSDK相關的文件復制到工程的libs目錄下。使用百度地圖SDK顯示地圖這是最簡單的地圖應用,只是在onCreate方法中初始化地圖組件,并在Activity的生命周期方法中同時完成地圖生命周期管理。關于完整的百度地圖AndroidSDK的使用請參考百度地圖SDK文檔。修改AndroidManifest.xml文件,以獲取申明服務、申請權限、注冊百度地圖應用Key等權限。使用百度地圖SDK顯示地圖03本章同步練習請結(jié)合百度定位和地圖SDK,將使用百度定位SDK得到的定位信息在百度地圖上顯示出來,即在地圖上顯示設備所在位置。本章同步練習感謝觀看第十章AndroidStudio移動應用開發(fā)高級進階Android電話控制01電話設備模塊如果編寫的程序必須具備電話模塊才能運行,如騷擾電話攔截程序,那么在將程序安裝到設備前,必須指定程序運行的必需特征。如果設備不具備這些特征,那么Android系統(tǒng)將拒絕安裝該程序。電話設備模塊在AndroidManifest.xml文件中使用如下語句指定電話特征:電話設備模塊如果程序不具備電話模塊也可以運行,只是應用功能可能會受到影響。那么不必強制電話模塊必須存在,只要檢查電話模塊的存在性,并適當禁用某些功能即可。電話設備模塊可以使用下列代碼來檢測電話模塊的存在性:電話設備模塊02電話基本控制撥打電話建議使用Android自帶的電話撥號程序撥打電話。通過使用Intent.ACTIONDIAL,同時指定要撥打的電話來啟動Android內(nèi)置的Activity來撥打電話,具體代碼如下:電話基本控制獲取電話設備詳細信息使用TelephonyManager獲取電話屬性狀態(tài),需要先獲取一個TelphoneManager對象。電話基本控制進而可獲取電話設備的詳細信息:電話基本控制進而可獲取電話設備的詳細信息:電話基本控制監(jiān)聽電話狀態(tài)的變化使用電話控制API來監(jiān)測電話狀態(tài)的變化,如呼叫狀態(tài)的變化、服務狀態(tài)的變化、位置狀態(tài)的變化、信號強度的變化等。為此,需要繼承PhoneStateListener類監(jiān)聽電話狀態(tài)的變化。電話基本控制為了監(jiān)聽電話狀態(tài),需要使用TelphoneManager來注冊監(jiān)聽器:電話基本控制監(jiān)聽電話呼叫狀態(tài)變化的廣播消息當電話的呼叫狀態(tài)發(fā)生變化時,如來電呼叫、接聽電話、掛斷電話,TelphoneManager會廣播一個ACTION_PHONE_STATE_CHANGED消息。通過監(jiān)聽這個廣播消息可以監(jiān)聽電話呼叫狀態(tài)的變化。為此,需要實現(xiàn)一個繼承BroadcastReceiver的類,并重載onReceive方法。電話基本控制例子如下:電話基本控制然后在AndroidManifest.xml文件中注冊監(jiān)聽器:電話基本控制03綜合舉例:電話攔截及電話錄音本章結(jié)束我們介紹一個電話控制的綜合例子:電話攔截及電話錄音。電話攔截,即攔截不想接聽的電話,如騷擾電話等;電話錄音,即對每個通話過程進行錄音,生成語音文件并將該文件保存在SD卡中。綜合舉例:電話攔截及電話錄音為此,先新建一個Android工程,并將ITelphone和NeighboringCellInfo這兩個接口的服務描述文件ITelphony.aidl和NeighboringCellInfo.aidl放置到工程中,如圖10-1所示。綜合舉例:電話攔截及電話錄音ITelphony.aidl文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ITelphony.aidl文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ITelphony.aidl文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ITelphony.aidl文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ITelphony.aidl文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音TelReceiverjava代碼內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音ListenPhoneService.java文件內(nèi)容如下所示:綜合舉例:電話攔截及電話錄音感謝觀看第十一章AndroidStudio移動應用開發(fā)高級進階短消息SMS和多媒體消息服務MMS01使用Intent發(fā)送SMS消息和MMS消息在多數(shù)情況下建議使用Intent發(fā)送SMS消息和MMS消息,這也是最簡單的發(fā)送SMS和MMS的方式。發(fā)送一個短消息SMS到指定號碼,其代碼片段如下:使用Intent發(fā)送SMS消息和MMS消息發(fā)送一個帶有附件的MMS消息到指定號碼,其代碼片段如下:使用Intent發(fā)送SMS消息和MMS消息02使用SMS管理器發(fā)送短消息發(fā)送文本消息和Data消息發(fā)送一段文本消息的代碼片段如下:使用SMS管理器發(fā)送短消息發(fā)送Data消息的代碼片段如下:使用SMS管理器發(fā)送短消息跟蹤消息的發(fā)送結(jié)果發(fā)送SMS并跟蹤消息的結(jié)果的代碼片段如下:使用SMS管理器發(fā)送短消息跟蹤消息的發(fā)送結(jié)果發(fā)送SMS并跟蹤消息的結(jié)果的代碼片段如下:使用SMS管理器發(fā)送短消息跟蹤消息的發(fā)送結(jié)果發(fā)送SMS并跟蹤消息的結(jié)果的代碼片段如下:使用SMS管理器發(fā)送短消息03監(jiān)聽SMS到達的廣播消息當有新短消息到達Android系統(tǒng)時,Android會廣播一條action為viderTelephony.SMS_RECEIVED的廣播消息。通過監(jiān)聽這條消息,即可監(jiān)聽SMS短消息。監(jiān)聽SMS到達的廣播消息以下是典型的短消息監(jiān)聽代碼:監(jiān)聽SMS到達的廣播消息當然,還需要在AndroidManifest.xml文件中注冊這個監(jiān)聽器,其代碼如下:監(jiān)聽SMS到達的廣播消息04SMS綜合舉例下面通過一個綜合舉例來結(jié)束本章內(nèi)容。該程序用來實現(xiàn)接收短信、按下指定按鈕回復短信信息。為此,新建一個SMSMMS的Android工程,具體代碼如下。SMS綜合舉例下面通過一個綜合舉例來結(jié)束本章內(nèi)容。該程序用來實現(xiàn)接收短信、按下指定按鈕回復短信信息。為此,新建一個SMSMMS的Android工程,具體代碼如下。SMS綜合舉例下面通過一個綜合舉例來結(jié)束本章內(nèi)容。該程序用來實現(xiàn)接收短信、按下指定按鈕回復短信信息。為此,新建一個SMSMMS的Android工程,具體代碼如下。SMS綜合舉例string.xml文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例MainActivity.java文件內(nèi)容如下:SMS綜合舉例Mai

溫馨提示

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

評論

0/150

提交評論