已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
安卓開發(fā) Broadcast 三種廣播的使用總結(jié)1、什么是安卓的Broadcast?安卓的四大組件之一,是一種廣泛應(yīng)用在應(yīng)用程序之間傳輸信息的機(jī)制。2、什么是安卓的BroadcastReceiver?是對(duì)發(fā)送出來(lái)的廣播進(jìn)行過(guò)濾接收并響應(yīng)的一類組件,它就是用來(lái)接收來(lái)自系統(tǒng)和應(yīng)用中的廣播。例如系統(tǒng)的廣播有開機(jī)廣播: 系統(tǒng)在開機(jī)時(shí)候會(huì)發(fā)送開機(jī)廣播,程序接收到之后,能進(jìn)行開機(jī)自啟動(dòng)。 網(wǎng)絡(luò)狀態(tài)改變廣播: 3g變wifi、網(wǎng)絡(luò)斷開等。電量改變廣播等等。3、Anroid為什么要這樣設(shè)計(jì)?大大減少開發(fā)工作量和開發(fā)周期 作為開發(fā)者,只需要掌握BroadcastReceiver4、怎么理解Broadcast和BroadcastReceiver ?Broadcast就像現(xiàn)實(shí)中的廣播電臺(tái),他發(fā)廣播信號(hào)來(lái),然后我們用收音機(jī)來(lái)接收,然后處理,并且播放出聲音, BroadcastReceiver就相當(dāng)于那臺(tái)收音機(jī)。5、使用方法發(fā)送:把信息裝入一個(gè)Intent對(duì)象(如:Action、Category),通過(guò)調(diào)相應(yīng)的方法將Intent對(duì)象以廣播的方式發(fā)送出去: sendBroadcast(); sendOrederBroadcast(); sendStickyBroadcast();接收:當(dāng)Intent發(fā)送之后,所有已經(jīng)注冊(cè)receivedBroadcastReceiver會(huì)檢查注冊(cè)時(shí)的IntentFilter是否與發(fā)送的Intent相匹配,若匹配則就會(huì)調(diào)用BroadcastReceiver的onReceiver()方法。所以當(dāng)我們定義一個(gè)BroadcastReceiver的時(shí)候,都需要實(shí)現(xiàn)onReceiver()方法。注意:BroadcastReceiver需要注冊(cè) 靜態(tài)注冊(cè) 代碼動(dòng)態(tài)注冊(cè)6、注意!BroadReceiver生命周期只有十秒左右,不能直接執(zhí)行耗時(shí)操作,不然會(huì)出現(xiàn)ANR(應(yīng)用程序無(wú)響應(yīng)),也不能用子線程來(lái)做,因?yàn)槊看螐V播來(lái)的時(shí)候都會(huì)創(chuàng)建一個(gè)Reveiver對(duì)象,并且調(diào)用onReceiver,執(zhí)行完之后 ,對(duì)象會(huì)立刻被銷毀,子線程也沒了 要做耗時(shí)操作的話,應(yīng)該通過(guò)發(fā)送Intent給Service,由Service來(lái)完成。 動(dòng)態(tài)注冊(cè)廣播接受者的話要在Destory回調(diào)事件進(jìn)行unregister7、廣播的分類普通廣播 (Normal broadcast)所有監(jiān)聽該廣播接受者都可以監(jiān)聽到該廣播同級(jí)別接收先后順序是隨機(jī)的(無(wú)序)級(jí)別低的后收到廣播接收器不能截?cái)鄰V播的繼續(xù)傳播,也不能處理廣播同級(jí)別動(dòng)態(tài)注冊(cè)高于靜態(tài)注冊(cè)有序廣播 (Oredered broadcast)按照接收者的優(yōu)先順序來(lái)接收廣播,優(yōu)先級(jí)別在intent-filter中的priority中聲明,-1000到1000之間,值越大優(yōu)先級(jí)越高,可以終止廣播的繼續(xù)傳播,接受者可以修改intent的內(nèi)容。同級(jí)別接收順序是隨機(jī)的級(jí)別低的后收到能截?cái)鄰V播的繼續(xù)傳播,高級(jí)別的廣播接收器接收廣播后能決定時(shí)候截?cái)唷D芴幚韽V播同級(jí)別動(dòng)態(tài)注冊(cè)高于靜態(tài)注冊(cè)異步廣播 (粘滯性滯留廣播) ps:已被棄用不能處理結(jié)果給下一個(gè)接收者,無(wú)法終止廣播。一直存在可以先發(fā)送廣播,再注冊(cè)接收器需要在清單文件添加android.permission.BROADCAST_STICKY權(quán)限8、Demo布局actibity_main三個(gè)按鈕: MainActivity.Javapublic class MainActivity extends AppCompatActivity implements View.OnClickListener private Button btOne; private Button btTwo; private Button btThree; MyReiceiverThree myReiceiver = new MyReiceiverThree(); Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btOne = (Button) findViewById(R.id.bt_one); btTwo = (Button) findViewById(R.id.bt_two); btThree = (Button) findViewById(R.id.bt_three); btOne.setOnClickListener(this); btTwo.setOnClickListener(this); btThree.setOnClickListener(this); /動(dòng)態(tài)注冊(cè),在當(dāng)前activity的生命周期內(nèi)運(yùn)行 /*IntentFilter filter= new IntentFilter(Config.BC_ONE_ACTION); MyReiceiver myReiceiver = new MyReiceiver(); registerReceiver(myReiceiver,filter);*/ Override public void onClick(View view) Intent intent = new Intent(); switch (view.getId() case R.id.bt_one: /發(fā)送普通廣播 intent.setAction(Config.BC_ONE_ACTION); intent.putExtra(msg,這是普通廣播); sendBroadcast(intent); break; case R.id.bt_two: /有序廣播 intent.setAction(Config.BC_TWO_ACTION); intent.putExtra(msg,這是有序廣播); sendOrderedBroadcast(intent,null); /其中第二個(gè)參數(shù)是設(shè)置權(quán)限,即接收器必須具有相應(yīng)的權(quán)限才能正常接收到廣播。 break; case R.id.bt_three: /異步廣播 intent.setAction(Config.BC_THREE_ACTION); intent.putExtra(msg,這是異步廣播); sendStickyBroadcast(intent); /可以先發(fā)送 后注冊(cè) IntentFilter filter = new IntentFilter(Config.BC_THREE_ACTION); registerReceiver(myReiceiver, filter); break; Override protected void onDestroy() super.onDestroy(); unregisterReceiver(myReiceiver); MyReceiver.javapublic class MyReiceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) /獲取處理的的廣播,普通廣播不能獲取處理 /true代表如果前面的接收器沒有存放數(shù)據(jù),則自動(dòng)創(chuàng)建一個(gè)空的Bundle對(duì)象,false則表示如果前面的接收器如果沒有存放任何數(shù)據(jù)則返回null。 Bundle bundle= getResultExtras(true); System.out.println(接收器1接收到處理的值:+bundle.getString(msg); System.out.println(接收器1:+intent.getStringExtra(msg); MyReceiverTwo.javapublic class MyReiceiverTwo extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) /Toast.makeText(context,intent.getStringExtra(msg),Toast.LENGTH_SHORT).show(); System.out.println(接收器2:+intent.getStringExtra(msg); abortBroadcast(); /截?cái)鄰V播,不讓別的接收器繼續(xù)接收,有序廣播才能成功攔截 /處理廣播 Bundle bundle = new Bundle(); bundle.putString(msg,處理過(guò)后的廣播); setResultExtras(bundle); / MyReceiverThree.javapublic class MyReiceiverThree extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) /Toast.makeText(context,intent.getStringExtra(msg),Toast.LENGTH_SHORT).show(); System.out.println(接收器3:+intent.getStringExtra(msg); Config.javapublic class Config public static final String BC_ONE_ACTION = com.example.testbroadcasetwo.bcone; public static final String BC_TWO_ACTION = com.example.testbroadcasetwo.bctwo; public static final String BC_THREE_ACTION = com.example.testbroadcasetwo.bcthree;Androidmanifest.xml /異步廣播需要 一個(gè)權(quán)限 /靜態(tài)注冊(cè),全局有效 /第一個(gè)接收器 /添加級(jí)別 /第二個(gè)接收器 /添加級(jí)別 Confiug.java 定義一個(gè)常量作為actionpublic class Config public static String BC_ONE = com.example.testbroadcast.bcone;TYPE.java 枚舉類,集合,沒用了,用來(lái)判斷是什么廣播的public enum TYPE NORMALHandleBroadcas.java p層的處理數(shù)據(jù)類public class HandleBroadcast private IShowView iShowView; private Context context; public HandleBroadcast(final IShowView iShowView, Context context) this.iShowView = iShowView; this.context = context; /必須動(dòng)態(tài)注冊(cè)才能實(shí)現(xiàn)回調(diào) MyBroadcastReceiver broadcast = new MyBroadcastReceiver(); IntentFilter intentFilter = ew IntentFilter(); intentFilter.addAction(Config.BC_ONE); context.registerReceiver(broadcast, intentFilter); broadcast.setiShowView(new IShowView() Override public void updateText(String msg) iShowView.updateText(msg); ); public void sendMyBroadcast(TYPE type) Intent intent = new Intent(); switch (type) case NORMAL: /普通廣播 intent.putExtra(msg, 普通廣播發(fā)送成功); intent.setAction(Config.BC_ONE); context.sendBroadcast(intent); break; MyBroadcast.java 廣播接收器public class MyBroadcastReceiver extends BroadcastReceiver private IShowView iShowView; Override public void onReceive(Context context, Intent intent) String on = intent.getAction(); String msg = intent.getStringExtra(msg); iShowView = (MainActivity) context; if (action.equals(Config.BC_ONE) /接收到普通廣播 iShowView.updateText(msg); /回調(diào)給HandleBroadcast public void setiShowView(IShowView iShowView) this.iShowView = iShowView; IShowView.java 回調(diào)到activity更新ui的接口public interface IShowView void updateText(String msg);MainActivity.javapublicclassMainActivityextendsAppCompatActivityimplements View.OnClickListener,IShowView private Button btOne; private TextView mTvResult; /p層,處理數(shù)據(jù) private HandleBroadcast handleBroadcast; Override p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 班主任心理健康與壓力管理的培訓(xùn)總結(jié)
- 公交掃惡除霸承諾書范本
- 2025-2030全球船用防火窗行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)運(yùn)動(dòng)刺激療法行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)矩形橋式起重機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球便攜式鼻腔沖洗器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球農(nóng)用氧化亞銅行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)鋼制螺旋錐齒輪行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)戶外電氣箱行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球軸承精密滾珠行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 蛋糕店服務(wù)員勞動(dòng)合同
- 土地買賣合同參考模板
- 2025高考數(shù)學(xué)二輪復(fù)習(xí)-專題一-微專題10-同構(gòu)函數(shù)問(wèn)題-專項(xiàng)訓(xùn)練【含答案】
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2024-2030年中國(guó)烘焙食品行業(yè)運(yùn)營(yíng)效益及營(yíng)銷前景預(yù)測(cè)報(bào)告
- 2025年上半年水利部長(zhǎng)江水利委員會(huì)事業(yè)單位招聘68人(湖北武漢)重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 寧德時(shí)代筆試題庫(kù)
- 五年級(jí)下冊(cè)北京版英語(yǔ)單詞
- 康復(fù)醫(yī)院患者隱私保護(hù)管理制度
- 新課標(biāo)I、Ⅱ卷 (2024-2020) 近五年高考英語(yǔ)真題滿分作文
- 浙江省嘉興市2023-2024學(xué)年六年級(jí)(上)期末數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論