




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章通知、服務與廣播4.1通知(Notification)4.2服務(Service)4.3廣播Broadcast4.4綜合案例4.5實訓本章小結
4.1通知(Notification)
4.1.1簡單通知任務目標在任務欄上方顯示文字通知“你好,這是Android課程”。效果如圖4-1-1和圖4-1-2所示。圖4-1-1運行界面圖圖4-1-2發送通知圖
實施步驟
步驟1:新建一個Module,命名為Ex4_1_1,其它采用默認設置。
步驟2:修改MainActivity.java。
步驟3:修改布局文件activity_main.xml,設置兩個按鈕。
步驟4:在手機上運行并觀察效果。
案例分析
1.?MainActivity.java清單分析
2.?activity_main.xml清單分析
相關知識
通知(Notification)是一種具有全局效果的通知,可以在系統的通知欄中顯示。
通知的目的是告知用戶App事件。在平時的使用中,通知主要有以下幾個作用:
(1)顯示接收到短消息、及時消息等信息,如QQ、微信、新浪、短信。
(2)顯示客戶端的推送消息,如廣告、優惠、版本更新、推薦新聞等。
(3)顯示正在進行的事物,如后臺運行的程序、音樂播放進度、下載進度等。
創建一個簡單的Notification,主要有以下三步:
(1)獲取NotificationManager實例。
(2)實例化NotificationCompat.Builder并設置相關屬性。必要的屬性有三個:小圖標,通過setSmallIcon()方法設置;標題,通過setContentTitle()方法設置;內容,通過setContentText()方法設置。這三個屬性必須設置,如果不設置則在運行時會拋出異常,其它屬性為可選項,可以不設置。
(3)通過builder.build()方法生成Notification對象,并發送通知。
下面介紹Notification的重要方法。
(1)?setSmallIcon()與setLargeIcon()。
在NotificationCompat.Builder中有設置通知的圖標大小的兩個方法。當setSmallIcon()與setLargeIcon()同時存在時,smallIcon顯示在largeIcon的右下角;當只設置setSmallIcon()時,smallIcon顯示在左側。
(2)設置提醒標志符flags。
可以設置提醒標志符,向通知添加聲音、閃燈和振動效果等達到提醒效果,也可以組合多個屬性。
各標志符的作用如表4-1-1所示。
(3)?setDefaults(intdefaults)。
向通知添加聲音、閃燈和振動效果的最簡單方法是使用默認(defaults)屬性,可以組合使用多個屬性。這是NotificationCompat.Builder中的方法,用于設置在通知到來時,通過什么方式進行提示,其可以設置的默認屬性如表4-1-2所示。
(4)?setVibrate(long[]pattern)。
(5)?.setLights(intledARGB,intledOnMS,intledOffMS)。
在使用這個方法時需要注意:
①只有在設置了標志符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支持三色燈提醒。
②顏色信息跟設備有關,不是所有的顏色都可以,需要有具體設備支持的顏色。
(6)?.setSound(Urisound)。
設置默認或自定義鈴聲。該方法可以設置消息提醒為默認的鈴聲,也可以設置為自定義的鈴聲。系統自帶的鈴聲效果的Uri位置為:Uri.withAppendedPath(Audio.Media.INTERNAL?_CONTENT_URI,"2"),設置系統默認的鈴聲,可以直接使用
(7)?setOngoing(booleanongoing)。
設置為ture,表示它為一個正在進行的通知。通常用來表示一個后臺任務,用戶正在參與(如播放音樂)或以某種方式正在等待,因此占用設備(如一個文件下載、同步操作、主動網絡連接等)。
(8)?setProgress(intmax,intprogress,booleanindeterminate)。
設置帶進度條通知的方法,可以在下載中使用。進度條通知的屬性與含義見表4-1-3。
4.1.2Notification中啟動Activity
任務目標
設計一個Notification,點擊后啟動另一個Acticity。效果如圖4-1-3所示。圖4-1-3點擊通知后跳轉Activity
實施步驟
步驟1:使用上一個項目Ex4_1_1。
步驟2:修改java文件MainActivity.java。步驟3:添加NewActivity.java。
步驟4:修改布局文件activity_main.xml。
步驟5:添加一個布局文件new_activity.xml。
步驟6:注冊NewActivity,在AndroidManifest.xml中增加如下內容。
步驟7:在手機上運行并觀察效果。
案例分析
1.?MainActivity.java清單分析
2.?NewActivity.java清單分析
3.?activity_main.xml清單分析
4.?new_activity.xml清單分析
5.?AndroidManifest.xml清單分析
App啟動后界面與圖4-1-1一致,點擊“發送通知”按鈕后發送Notification,界面與圖4-1-2一致,本項目增加了一個功能,點擊通知會跳轉到一個Activity,跳轉后界面如圖4-1-3所示。
相關知識
要在通知中啟動另一個Activity,需要先使用PendingIntent。
PendingIntent是一種特殊的Intent,主要的區別在于Intent的執行是立刻的,而PendingIntent的執行不是立刻的。
PendingIntent對象,使用方法類的靜態方法如下:
(1)跳轉到一個activity組件,使用方法getActivity(Context,int,Intent,int)。
(2)打開一個廣播組件,使用方法getBroadcast(Context,int,Intent,int)。
(3)打開一個服務組件,使用方法getService(Context,int,Intent,int)。
在Notification中使用PendingIntent分為三步:
4.2服務(Service)
4.2.1Service任務目標練習使用Service,在DDMS的LogCat界面產生LOG信息。
實施步驟
步驟1:新建一個Module,命名為Ex4_2_1,其它默認設置。
步驟2:新建一個繼承自Service的類MyService.java,并重寫父類的onCreate()、onStartCommand()和onDestroy()方法。
步驟3:修改activity_main.xml作為程序的主布局文件,設置兩個按鈕,一個用于啟動Srevice,一個用于停止Service。
步驟4:修改MainActivity.java,作為程序的主Activity,在里面加入啟動Service和停止Service的邏輯。
步驟5:項目中的每一個Service都必須在AndroidManifest.xml中注冊,所以還需要編輯AndroidManifest.xml文件。
步驟6:在手機上運行并觀察效果。
案例分析
1.?MyService.java清單分析
2.?activity_main.xml清單分析
3.?MainActivity.java清單分析
4.?AndroidManifest.xml清單分析
pp運行后的界面如圖4-2-1所示,點擊“啟動服務”按鈕,啟動Service,因為在這之前Service沒有運行,第一次啟動后,會執行onCreate()和onStartCommand()兩個方法,該Service會在DDMS的LogCAT界面輸出兩行信息,如圖4-2-2所示。圖4-2-1Service啟動界面圖4-2-2點擊“啟動”按鈕后LogCAT界面
當再次點擊“啟動服務”按鈕,因為此時Service已經在運行,則只執行onStartCommand(),輸出一行信息,如圖4-2-3所示。圖4-2-3再次點擊“啟動”按鈕后LogCAT界面
只要Service在運行,啟動該Service時就只會執行onStartCommand(),onCreate()方法只有在第一次啟動Service時才會執行。點擊“停止服務”按鈕后,Service被終止,如圖4-2-4所示。圖4-2-4點擊停止按鈕后LogCAT界面
相關知識
1.?Service簡介
Service的啟動有兩種方式:context.startService()和context.bindService()。它們的區別如下:
(1)通過context.startService()啟動Service,則訪問者與Service之間沒有關聯,即使訪問者退出了,Service仍然運行。
(2)通過context.bindService()方法啟動Service,則訪問者與Service綁定在了一起,訪問者一旦退出,Service就會終止。
2.?Service啟動流程
1)?context.startService()啟動流程
context.startService()→onCreate()→onStartCommand()→Servicerunning→context.stopService()→onDestroy()→Servicestop
調用startService的生命周期為onCreate→onStart
Command(可多次調用)→onDestroy,如圖4-2-5所示。圖4-2-5Service的生命周期
2)?context.bindService()啟動流程
context.bindService()→onCreate()→onBind()→Servicerunning→onUnbind()→onDestroy()→Servicestop
3.?Service方法介紹
1)?onBind()方法
當另一個組件想通過調用bindService()與服務綁定(例如執行RPC)時,系統將調用此方法。
2)?onCreate()方法
首次創建服務時,系統將調用此方法來執行一次性設置程序(在調用onStartCommand()或onBind()之前)。
3)?onStartCommand()方法
當另一個組件(如Activity)通過調用startService()請求啟動服務時,系統將調用此方法。
onStartCommand(Intentintent、intflags、intstartId)方法有3個傳入參數,它們的含義如下:
4)?onDestroy()
當服務不再使用且將被銷毀時,系統將調用此方法。服務應該實現此方法來清理所有資源,如線程、注冊的偵聽器、接收器等,這是服務接收的最后一個調用。
4.2.2bindService
任務目標
練習使用bindService,在DDMS的LogCat界面產生LOG信息,說明綁定Service時會執行哪些方法,解綁Service時會執行哪些方法。
實施步驟
步驟1:新建一個Module,命名為Ex4_2_2,其它設置默認。
步驟2:新建一個類LocalService.java。步驟3:修改MainActivity.java。
步驟4:如下清單activity_main.xml是布局文件,設置了三個按鈕。
步驟5:在AndroidManifest.xml中注冊Service,增加如下內容。
實施步驟
步驟1:新建一個Module,命名為Ex4_2_2,其它設置默認。
步驟2:新建一個類LocalService.java。
步驟3:修改MainActivity.java。
步驟4:如下清單activity_main.xml是布局文件,設置了三個按鈕。
步驟5:在AndroidManifest.xml中注冊Service,增加如下內容。
運行界面如圖4-2-6所示。圖4-2-6運行界面
點擊“綁定服務器”按鈕,執行綁定服務器功能,如圖4-2-7所示。當第一次點擊綁定服務時,LocalService服務端的onCreate()、onBind方法會依次被調用,此時客戶端的ServiceConnection的onServiceConnected()被調用并返回LocalBinder對象,接著調用LocalBinder的getService方法返回LocalService實例對象,此時客戶端便持有LocalService的實例對象,可以任意調用LocalService類中的聲明公共方法。圖4-2-7點擊綁定服務器
綁定服務器后,多次點擊“綁定服務器”按鈕進行多次綁定,如圖4-2-8所示。圖4-2-8多次點擊綁定服務器
再點擊獲取服務端的數據,點擊了3次,通過getRandomNumber()獲取了服務端的3個不同數據,如圖4-2-9所示。圖4-2-9點擊獲取數據
最后點擊解除綁定,如圖4-2-10所示,此時LocalService的onUnBind、onDestroy方法依次被回調,并且多次綁定只需一次解綁即可。這說明綁定狀態下的Service生命周期方法的調用依次為onCreate()、onBind、onUnBind、onDestroy。圖4-2-10點擊解除綁定
相關知識
bindService使用開發步驟如下:
(1)創建bindService服務端,繼承自Service并在類中,創建一個實現IBinder接口的實例對象并提供公共方法給客戶端調用。
(2)從onBind()回調方法返回此Binder實例。
(3)在客戶端中,從onServiceConnected()回調方法接收Binder,并使用提供的方法調用綁定服務。
在客戶端中創建了一個ServiceConnection對象conn,代表與服務的連接,它只有兩個方法,分別是onServiceConnected方法和onServiceDisconnected方法。這兩個方法講解如下:
(1)?onServiceConnected(ComponentNamename,IBinderservice),系統會調用該方法以傳遞服務的onBind()方法返回的IBinder。
(2)?onServiceDisconnected(ComponentNamename),Android系統會在與服務的連接意外中斷時(例如當服務崩潰或被終止時)調用該方法。
(3)?bindService(Intentservice,ServiceConnectionconn,intflags),該方法執行綁定服務操作,其中Intent是要綁定的服務(也就是LocalService)的意圖,而ServiceConnection代表與服務的連接,它只有兩個方法,前面已分析過,flags則是指定綁定時是否自動創建Service,0代表不自動創建,BIND_AUTO_CREATE則代表自動創建。
(4)?unbindService(ServiceConnectionconn),該方法執行解除綁定的操作,其中ServiceConnection代表與服務的連接。
4.2.3IntentService
任務目標
練習使用IntentService,在DDMS的LogCat界面產生LOG信息,演示IntentService啟動后執行的動作。
實施步驟
步驟1:新建一個Module,命名為Ex4_2_3,其它默認設置。
步驟2:新建一個Service,如下的intentServiceTest.java所示,實現了一個繼承了IntentService的類intentServiceTest.java,并在各個方法中插入LOG語句,顯示調試信息。
步驟3:修改MainActivity.java,啟動intentServiceTest類。
步驟4:修改布局文件activity_main.xml,實現一個按鈕并設定了點擊動作執行的方法。
步驟5:在AndroidManifest.xml中注冊IntentService,增加如下語句。
步驟6:在手機上運行并觀察效果。
案例分析
1.?intentServiceTest.java清單分析
2.?MainActivity.java清單分析
MainActivity.java是主類。
行16~32:實現按鈕點擊動作,如圖4-2-11所示。圖4-2-11啟動界面
程序運行如圖4-2-12所示。從結果可以看到,onCreate方法只執行了一次,而onStartCommand和onStart方法執行了兩次,開啟了兩個WorkThread,這就證實了之前所說的啟動多次但IntentService的實例只有一個的說法,這跟傳統的Service是一樣的。Operation1也是先于Operation2打印,并且兩個操作間停頓了2s,最后是onDestroy銷毀了IntentService。圖4-2-12輸出信息
相關知識
在Android中,應用的響應性被活動管理器(ActivityManager)和窗口管理器(WindowManager)這兩個系統服務所監視。當用戶觸發了輸入事件后(如鍵盤輸入,點擊按鈕等),如果應用5秒內沒有響應,那么,Android會認為該應用無響應,便會彈出(ApplicationNoResponse)無響應異常對話框。
IntentService可以看作Service和HandlerThread的結合體,在完成使命之后會自動停止,適合需要在工作線程處理與UI無關任務的場景。IntentService有如下特點:
(1)?IntentService是繼承自Service并處理異步請求的一個類,在IntentService內有一個工作線程來處理耗時操作。
(2)當任務執行完后,IntentService會自動停止,不需要去手動結束。
(3)如果多次啟動IntentService,那么每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調方法中執行,每次只會執行一個工作線程,執行完第一個再執行第二個,以此類推,直到執行自動結束。
(4)所有請求都在一個單線程中,不會阻塞應用程序的主線程(UIThread),同一時間只處理一個請求。
只重寫onHandleIntent()方法后LOG信息,從圖4-2-13展示出的信息中可以看到,兩個操作Operation1和Operation2均得到了執行。圖4-2-13只實現onHandleIntent()方法后輸出結果
4.3廣播Broadcast
任務目標Service在后臺計數,利用廣播Broadcast把計數值傳遞給主界面,在主界面中顯示出計數值。界面如圖4-3-1所示。圖4-3-1啟動界面
實施步驟
步驟1:新建一個Module,命名為ex4_3_1,其它默認設置。
步驟2:新建一個接口文件ICounterService.java。步驟3:新建一個Service文件CounterService.java,用于實現后臺計數。
步驟3:修改文件MainActivity.java。
步驟4:修改布局文件activity_main.xml。
步驟5:新建變量文件string.xml。
步驟6:修改文件AndroidManifest.xml,注冊Service。
步驟7:在手機上運行并觀察效果。
案例分析
1.?ICounterService.java清單分析
2.?CounterService.java清單分析
3.?MainActivity.java清單分析
4.?activity_main.xml清單分析
5.?string.xml清單分析
6.?AndroidManifest.xml清單分析
程序運行后的界面如圖4-3-1所示,有兩個按鈕:一個用于啟動計數,另一個用于停止計數。此外,還有一個計數值。
啟動后,通過圖4-3-2的LogCat信息可以看到,創建了計數服務器,然后連接到服務器上。圖4-3-2啟動后LogCat信息
單擊“開始計數”啟動計數程序,獲得返回的計數值,如圖4-3-3所示。圖4-3-3運行界面
運行時的LogCat信息如圖4-3-4所示,COUNTER的數值在不斷變化,LogCat也在不斷地輸出提示信息。圖4-3-4運行中的LogCat信息
點擊“停止計數”按鈕停止計數后,計數值保持不變,如圖4-3-5所示。圖4-3-5停止界面
停止計數后,LogCat輸出的信息如圖4-3-6所示。從圖中可以看到,停止計數后Service依然發送了一個計數值,并被客戶端接收到了。圖4-3-6停止后LogCat信息
若退出App,LogCat輸出的信息如圖4-3-7所示,從圖中可以看到,當App退出后,Service也被銷毀了。圖4-3-7退出后LogCat信息
相關知識
Broadcast是Android四大組件之一,也是一種廣泛運用在應用程序之間傳輸信息的機制,Android發送的廣播內容是一個Intent,這個Intent中可以攜帶要發送的數據。
廣播作為Android組件間的通信方式,可以使用的場景如下:
(1)同一App內有多個進程的不同組件之間的消息通信。
(2)不同App組件之間消息的通信。
廣播接收者(BroadcastReceiver)用于接收廣播Intent,廣播Intent的發送是通過調用Context.sendBroadcast()、Context.sendOrderedBroadcast()來實現的。通常一個廣播的Intent可以被訂閱了此Intent的多個廣播接收者所接收。要實現一個廣播接收者的方法有以下兩步。
第一步:定義廣播接收者,繼承BroadcastReceiver,并重寫onReceive()方法。
第二步:訂閱感興趣的廣播Intent。訂閱方法有兩種:
(1)使用代碼進行訂閱(動態訂閱)。
(2)在AndroidManifest.xml文件中的<application>節點里進行訂閱(靜態訂閱)。
使用廣播有以下兩個步驟。
第一步:廣播的接收者需要通過調用registerReceiver函數告訴系統,它對什么樣的廣播有興趣,即指定IntentFilter,并且向系統注冊廣播接收器,即指定BroadcastReceiver。
第二步:廣播的發送者通過調用sendBroadcast函數來發送一個指定的廣播,并且可以指定廣播的相關參數。
4.4綜合案例
任務目標設計一個帶進度條的Notification,利用DownloadService下載,然后在Notification中顯示下載進度
實施步驟
步驟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國直鏈烷基苯磺酸(LAB)項目創業計劃書
- 漢字字庫實驗報告
- 中國接逢用油灰(膩子)項目商業計劃書
- 云南鮮花餅的營銷策劃方案
- 中國電動鉻鉬鋼閘閥行業市場規模及未來投資方向研究報告
- 2025年安全整改報告(四)
- 智慧醫療的遠程手術機器人的多模態感知與虛擬現實 (VR) 操控及力反饋技術研發可行性研究報告
- 北京大學卓越人才培養計劃
- 生物醫學中的微積分方程應用-洞察及研究
- 離子通道功能研究-洞察及研究
- 七下第三單元《駱駝祥子》整本書閱讀 公開課一等獎創新教學設計
- 醫療器械銷售授權證書審批指南
- 陪診公司推廣方案
- 彌勒旅游策劃方案
- 2024年河南省豫地科技集團有限公司招聘筆試參考題庫含答案解析
- 老年人中醫養生知識健康講座內容
- 隱孢子蟲病健康宣教
- 車站調車作業-駝峰調車作業
- 瀝青路面損壞調查表(帶公式自動計算)
- 科研倫理與學術規范-課后作業答案
- 建設工程聯合施工協議書
評論
0/150
提交評論