第9章 BroadcastReceiver的使用

Slides:



Advertisements
Similar presentations
第四章 类、对象和接口.
Advertisements

第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
第一章 Android简介与环境搭建 QQ号: QQ群: (Android编程入门) 网络资源:
四資二甲 第三週作業 物件導向程式設計.
MVC Servlet与MVC设计模式.
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
广东省教育厅教研室 黄志红 ,     研究改进行动     反思促使成长 广东省教育厅教研室  黄志红 ,
第一章 面向对象程序设计.
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
第二章 JAVA语言基础.
Activity之间的数据传递.
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
Chapter 13 Android 實戰演練.
行動研究就是一種行動性的研究,由行動者來進行研究,而不是由外於行動領域的學者與與科學家來進行,研究的問題也取自行動。
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
7.3 Intent传值.
第10章 App微信分享的实现 倚动实验室.
第11章 Android GPS位置服务与地图编程
Java基础 JavaSE异常.
第9章 BroadcastReceiver的使用
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
第4章 Android生命周期.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
ANDROID PROGRAMMING2.
Android + Service 建國科技大學 資管系 饒瑞佶.
第6章 Android广播接收器 (BroadcastReceiver)
职责链模式.
Java语言程序设计 第五部分 Java异常处理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第2讲 移动应用开发基础知识(二) 宋婕
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第8章 Service解析.
Android手动测试实践 ——绮珠.
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
Android 视频教程简介.
异常及处理.
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
C/C++/Java 哪些值不是头等程序对象
第10章 GPS位置服务与地图编程.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
實驗十一:待辦事項程式 (儲存在手機上).
Intent.
Android 开发入门.
Android Application Component
網路應用.
第十二章 过滤器.
實驗九:延續實驗八, 製作一個完整音樂播放器
第二章 Java语法基础.
Broadcasts (廣播) 靜宜大學資管系 楊子青
實驗十六:匯出APK安裝檔與軟體上架.
第二章 Java基本语法 讲师:复凡.
辅导课程十二.
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
Android进程间通讯.
加速感測器 靜宜大學資管系 楊子青.
Part 8 Broadcast Receiver、Service和App Widget
高语境文化中的公共危机应对 殷 卉 Hua Yan Public response to crisis under
Presentation transcript:

第9章 BroadcastReceiver的使用

本章知识结构图

BroadcastReceiver介绍 广播是一种广泛运用在应用程序之间传输信息的机制,BroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。 BroadcastReceiver 本质上是一种全局监听器,用于监听系统全局的广播消息,因此它可以非常方便地实现系统中不同组件之间的通信。 BroadcastReceiver用于接收指定的广播,广播的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcat()来实现的。通常一个广播可以被订阅了该Intent的多个广播接收者所接收,如同一个广播台,可以被多位听众收听一样。

BroadcastReceiver介绍 BroadcastReceiver自身并不实现图形用户界面,但是当它收到某个消息后,可以启动Activity作为响应,或者通过NotificationManager提醒用户,或者启动Service等等。 启动BroadcastReceiver通常需要以下两步: 1、创建Intent,指定BroadcastReceiver的特征; 2、调用Context的sendBroadcast()(发送普通广播)或sendOrderedBroadcast()(发送有序广播)方法来发送广播,触发指定的BroadcastReceiver。 当应用程序发出一个广播之后,所有匹配该Intent的BroadcastReceiver都有可能被启动。

BroadcastReceiver介绍 开发自定义的BroadcastReceiver与开发其他组件一样,需要继承Android中的BroadcastReceiver基类,然后实现onReceive()处理业务逻辑。 public class MyBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { } 在onReceive()方法中,接收了一个Intent的参数,通过它可以获取广播所携带的数据。

BroadcastReceiver介绍 创建完广播接收者后,并不能马上使用,还必须为它注册一个指定的广播,就如同我们有了收音机后,还必须选择收听哪个频道一样。在Android中为BroadcastReceiver注册广播有两种方式:静态注册和动态注册。 静态注册:是指在AndroidManifest.xml文件中进行注册。 <receiver android:name=".MyBroadcastReceiver"> <intent-filter > <action android:name="iet.jxufe.cn.android.myBroadcastReceiver"> </action> </intent-filter> </receiver>

BroadcastReceiver介绍 动态注册:需要在代码中动态的指定广播地址并注册,通常是在Activity或Service中调用ContextWrapper的registerReceiver(BroadcastReceiver receiver,IntentFilter filter)方法进行注册。 MyBroadcastReceiver myBroadcastReceiver=new MyBroadcastReceiver(); IntentFilter filter=new IntentFilter("iet.jxufe.cn.android.myBroadcastReceiver"); registerReceiver(myBroadcastReceiver, filter); 注册完成后,即可接收相应的广播消息。广播发生后,系统会创建对应的BroadcastReceiver实例,并自动触发它的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。

BroadcastReceiver介绍 如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在onReceive()方法里执行一些耗时的操作,否则会弹出ANR(Application No Response)对话框。 如果确实需要根据广播来完成一项比较耗时的操作,则可以考虑通过Intent启动一个Service来完成该操作。不应考虑使用新线程去完成耗时的操作,因为BroadcastReceiver本身的生命周期极短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经退出了。 如果广播接收者所在的进程结束了,虽然该进程内还有用户启动的新线程,但由于该进程内不包含任何活动组件,因此系统可能在内存紧张时优先结束线程。这样就可能导致BroadcastReceiver启动的子线程不能执行完成。

发送广播的两种方式 广播接收者注册好了以后,并不会直接运行,必须在接收广播后才会被调用。因此,必须首先发送广播,在Android中提供了两种发送广播的方式,调用Context的sendBroadcast()或sendOrderedBroadcast()方法。 sendBroadcast(Intent intent):用于发送普通广播,其中intent参数表示接收该广播的广播接收者所需要满足的条件,以及广播所传递的数据; sendOrderedBroadcast(Intent intent, String receiverPermission):用于发送有序广播,intent参数同上,receiverPermission表示接收该广播的许可权限。

广播的分类 普通广播(Normal Broadcast):是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。 有序广播(Ordered Broadcast):有序广播的接收者将按预先声明的优先级依次接收广播。有序广播接收者可以终止广播的传播(通过调用abortBroadcast()方法),广播的传播一旦终止,后面的接收者就无法接收到广播。另外,广播的接收者可以将数据传递给下一个接收者(通过setResultExtras(Bundle bundle)方法)。

案例—音乐播放器 案例实现简单音乐播放功能,能够播放、暂停和停止音乐,一首歌播放结束后能够自动播放下一首歌,并且界面显示会根据用户操作进行相应更新。当单击播放按钮时,会显示正在播放的歌曲,并且播放按钮变为暂停按钮。当一首歌曲播放结束后,会自动播放下一首,当单击停止按钮后,音乐停止播放,并且暂停按钮会变为播放按钮。

案例—音乐播放器 基于Service的音乐播放器 程序的音乐将会由后台运行的Service组件负责播放,当后台的播放状态发生改变时,程序将会发送广播通知前台Activity更新界面;当用户单击前台Activity的界面按钮时,系统将通过发送广播通知后台Service来改变播放状态。 此程序中包含两个BroadcastReceiver(广播接收器)和一个Service服务。 一个广播接收器用于接收播放状态发生改变的广播; 一个广播接收器用于接收歌曲播放完成时发送的广播。

案例—音乐播放器

案例—音乐播放器 开发步骤 1、Activity的界面布局,在Activity中内嵌一个广播接收器ActivityReceiver,用于接收来自Service的广播。 2、为相应的按钮添加单击事件,在单击事件中发送广播; 3、开发音乐播放的服务(MusicService),并在服务中内嵌一个广播接收器ServiceReceiver,用于接收来自Activity的广播; 4、分别编写广播接收器的业务逻辑处理;

案例—音乐播放器 注意事项 1、由于音乐文件比较大,如果直接放到应用程序中将会导致最终的apk非常大,运行也比较慢,实际上大部分的音乐播放器播放的都是手机上已有的音乐,或者在线音乐。如果要获取手机上的音乐,可通过ContentProvider进行操作,在此,简化操作,直接指定音乐的路径。 2、需在清单文件中对播放音乐的服务进行注册; 3、为了使广播接收器能够方便的访问Activity或Service中的成员,建议将广播接收器作为它们的内部类; 4、音乐播放需要使用到MediaPlayer类;

案例—音乐播放器 由播放到暂停 由暂停到播放 public void play(View view){ Intent intent=new Intent(MainActivity.Broadcast_Activity); if(isPlaying){ isPlaying=false; intent.putExtra("type",2); playBtn.setImageResource(R.drawable.play); }else{ intent.putExtra("type",1); isPlaying=true; playBtn.setImageResource(R.drawable.pause); } sendBroadcast(intent); 由播放到暂停 由暂停到播放 播放/暂停按钮事件处理

案例—音乐播放器 public void start(){ try { mPlayer.setDataSource(paths[current]); mPlayer.prepare(); mPlayer.start(); Intent intent=new Intent(MainActivity.Broadcast_Service); intent.putExtra("title",titles[current]); intent.putExtra("singer",singers[current]); sendBroadcast(intent); } catch (IOException e) { e.printStackTrace(); } 设置音乐路径 准备 开始播放 创建并发送广播

测试题 1.注册广播接收器有哪两种方式? 2.有序广播有什么特点? 3.下列关于有序广播的说法错误的是( )。 3.下列关于有序广播的说法错误的是( )。 A)发送有序广播时,符合要求的广播接收者根据优先级来排序进行接收 B)优先级高的广播接收者可向优先级低的广播接收者传值 C)优先接收到广播的接收者可以终止广播,优先级低的则无法接收 D)优先级低的广播接收者只能得到它前一个广播接收者传递的值,而无法得到更前面的广播接收者传递的值 4.在原有音乐播放器基础之上,为其添加两个按钮用于控制播放上一首和下一首音乐。尝试添加拖动条(SeekBar)来控制音乐播放的进度。