Android移動應用設計與開發(fā)-第07章_第1頁
Android移動應用設計與開發(fā)-第07章_第2頁
Android移動應用設計與開發(fā)-第07章_第3頁
Android移動應用設計與開發(fā)-第07章_第4頁
Android移動應用設計與開發(fā)-第07章_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Android移動應用設計與開發(fā)第7章廣播7.1發(fā)送和接收廣播7.1.1發(fā)送廣播7.1.2接收廣播7.1.3聲明廣播7.1.4廣播的生命周期7.1.5常見廣播Action常量7.2廣播實例本章導讀7.1發(fā)送和接收廣播

在Android里面有各式各樣的廣播,比如:電池的狀態(tài)變化、信號的強弱狀態(tài)、電話的接聽和短信的接收等等,本節(jié)將會介紹系統(tǒng)發(fā)送、監(jiān)聽這些廣播的機制7.1.1發(fā)送廣播可以利用Intent來發(fā)送廣播,在需要發(fā)消息的地方創(chuàng)建一個Intent對象,將信息的內容和用于過濾的信息封裝起來,通過以下三種方法將該Intent對象廣播出去:(1)發(fā)送廣播的方法發(fā)送廣播方法Context.sendBroadcast方法Context.sendOrderedBroadcast方法Context.sendStickyBroadcast方法7.1.1發(fā)送廣播(2)3種發(fā)送廣播方法的區(qū)別sendBroadcast或sendStickyBroadcast發(fā)送出去的Intent,對于所有滿足條件的BroadcastReceiver都會執(zhí)行其onReceive方法。但若有多個滿足條件的BroadcastReceiver,其執(zhí)行onReceive方法的順序是沒有保證的。通過sendOrderedBroadcast方法發(fā)送出去的Intent,會根據(jù)BroadcastReceiver注冊時IntentFilter設置的優(yōu)先級的順序來執(zhí)行onReceive方法,相同優(yōu)先級的BroadcastReceiver執(zhí)行onReceive方法的順序是沒有保證的。sendStickyBroadcast主要的不同是,Intent在發(fā)送后會一直存在,并且在以后調用registerReceiver注冊相匹配的Receiver時會把這個Intent對象直接返回給新注冊的Receiver。7.1.1發(fā)送廣播(3)發(fā)送廣播示例通常我們在發(fā)送廣播時使用的是sendBroadcast()方法,但需要注意的是,在構造Intent時必須用一個全局唯一的字符串標識其要執(zhí)行的動作,通常使用應用程序包的名稱,也可以采用自己定義的動作。如果要在Intent中傳遞其他的數(shù)據(jù),可以用Intent的putExtra()方法。下面為發(fā)送一帶有額外數(shù)據(jù)的廣播的簡單代碼:StringIntent_Action=com.android.BroadcastReceiverDemo;Intentintent=newIntent(Intent_Action);Intent.putExtra(“參數(shù)”,“參數(shù)值”);SendBroadcast(intent);7.1.2接收廣播在程序發(fā)送出去廣播之后,必然要有接收器來接收廣播。在Android下,要想接收廣播信息,那么這個廣播接收器就得我們自己來實現(xiàn)。我們可以繼承BroadcastReceiver類,這就是一個廣播接收器。但是,在接收到廣播之后,要想處理相關事件,我們必須覆蓋其onReceiver()方法,在該方法中實現(xiàn)對廣播事件的相關處理,當Android系統(tǒng)接收到與之匹配的廣播消息時,會自動啟動此BroadcastReceiver開始接收廣播。以下為實現(xiàn)廣播接收的過程:

publicclassMyBroadcastReceiverextendsBroadcastReceiver{//action名稱

StringIntent_Action=com.android.BroadcastReceiverDemo;publicvoidonReceive(Contextcontext,Intentintent){if(intent.getAction().equals(Intent_Action)){//相應事件的處理}}}注意:BroadcastReceiver類中的onReceiver()方法必須要在5秒鐘內執(zhí)行完事件,否則Android系統(tǒng)會認為該組件失去響應,并提示用戶強行關閉該組件。因此,對于比較耗時的響應事件,可以另開一線程,單獨進行事件的處理。7.1.3聲明廣播要想使用廣播接收器來響應相應的事件,必須把廣播接收器注冊到系統(tǒng)里,讓系統(tǒng)知道我們有這個廣播接收器。當有廣播到來時,系統(tǒng)會找到匹配該廣播的廣播接收器,之后進行相應事件的處理。這里有兩種廣播注冊方法:(1)廣播注冊的方法代碼注冊廣播//生成廣播接收器MyBroadcastReceiverreceiver=

new

MyBroadcastReceiver();//實例化過濾器并設置要過濾的廣播IntentFilterintentFilter=newIntentFilter("Intent_Action");//注冊廣播registerReceiver(receiver,intentFilter);.在AndroidManifest.xml中配置廣播<receiverandroid:name="MyBroadcastReceiver"><intent-filter><actionandroid:name="com.androidbook.MyBroadcastReceiver"/></intent-filter></receiver>7.1.3聲明廣播(2)兩種廣播注冊方法的區(qū)別第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期第二種是常駐型,也就是說當應用程序關閉后,如果有信息廣播過來,程序廣播接收器也會被系統(tǒng)調用自動運行廣播接收器被注冊到系統(tǒng)之后,當系統(tǒng)接收到廣播時,通過廣播的動作選出對應的廣播接收器,再由廣播接收器完成相應事件的響應

7.1.4廣播的生命周期(1)廣播的生命周期流程發(fā)送廣播接收廣播結束7.1.4廣播的生命周期(2)實例分析下圖為發(fā)送廣播界面:當我們點擊按鈕時,它向Android發(fā)送一個廣播。通過Log視窗可以看到Android廣播的生命周期,如下圖所示

:7.1.5常見廣播Action常量

對于廣播來說,Action指被廣播出去的動作。理論上Action可以為任何字符串,而與Android系統(tǒng)應用有關的Action字符串以靜態(tài)字符串常量的形式定義在了Intent類中。Action包含很多種,例如呼入、呼出電話、接受短信等等,下面是Android定義好的常見的一些標準廣播常量,如下表所示:常量值意義ent.action.BOOT_COMPLETEDACTION_BOOT_COMPLETED系統(tǒng)啟動ent.action.ACTION_TIME_CHANGEDACTION_TIME_CHANGED時間改變ent.action.ACTION_DATE_CHANGEDACTION_DATE_CHANGED日期改變ent.action.ACTION_TIMEZONE_CHANGEDACTION_TIMEZONE_CHANGED時區(qū)改變ent.action.ACTION_BATTERY_LOWACTION_BATTERY_LOW電量低ent.action.ACTION_MEDIA_EJECTACTION_MEDIA_EJECT插入或拔出外部媒體ent.action.ACTION_MEDIA_BUTTONACTION_MEDIA_BUTTON按下多媒體ent.action.ACTION_PACKAGE_ADDEDACTION_PACKAGE_ADDED添加包ent.action.ACTION_PACKAGE_REMOVEDACTION_PACKAGE_REMOVED刪除包ent.action.ACTION_POWER_CONNECTEDACTION_POWER_CONNECTED插上外部電源ent.action.ACTION_POWER_DISCONNECTEDACTION_POWER_DISCONNECTED斷開外部電源vider.Telephony.SMS_RECEIVEDTelephony.SMS_RECEIVED接收短信ent.action.SendSend發(fā)送郵件7.2廣播實例(1)實例說明:當用戶執(zhí)行登錄/注銷操作,若登錄/注銷成功,系統(tǒng)會發(fā)送登錄/注銷成功的廣播。如:廣播接收器接收到的Action為表示登錄成功的Action,界面進入主界面,并且Toast組件提示登錄,如下圖所示:

7.2廣播實例importcom.androidbook.client.R;importcom.androidbook.client.application.ClientApplication;importwork.mode.RequestParam;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.content.SharedPreferences;importandroid.content.SharedPreferences.Editor;importandroid.widget.Toast;

public

classLoginLogoutBroadCastextendsBroadcastReceiver{

public

static

finalStringBROADCAST_LOGIN="login";

public

static

finalStringBROADCAST_LOGOUT="logout";

@Override

public

voidonReceive(Contextcontext,Intentintent){//接收登錄的廣播并保存用戶的在線狀態(tài)if(intent.getAction().equals(BROADCAST_LOGIN)){Toast.makeText(context,context.getText(R.string.login),Toast.LENGTH_SHORT).show();SharedPreferencessharedPreferences=((ClientApplication)context.getApplicationContext()).getLoginUserInfo();Editoreditor=sharedPreferences.edit();editor.putInt(RequestParam.STATUS,RequestParam.ONLINE);mit();return;}(2)實例代碼

7.2廣播實例//接收注銷的廣播并保存用戶的離線狀態(tài)if(intent.getAction().equals(BROADCAST_LOGOUT)){Toast.makeText(context,context.getText(R.string.menu_logout),Toast.LENGTH_SHORT).show();SharedPreferencessharedPreferences=((ClientApplication)context.getApplicationContext()).getLoginUserInfo();Editoreditor=sharedPreferences.edit();editor.putInt(RequestParam.STATUS,RequestParam.OFFLINE);mit();Intentservice=newIntent(context,MsgServic

溫馨提示

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

評論

0/150

提交評論