欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【教学课件】第9章BroadcastReceiver的使用.ppt

    • 资源ID:69865683       资源大小:1.26MB        全文页数:28页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【教学课件】第9章BroadcastReceiver的使用.ppt

    第第9章章 BroadcastReceiver的使用的使用网络资源:QQ号:1281147324QQ群:490420731(Android编程入门)主要内容主要内容9.1 BroadcastReceiver9.1 BroadcastReceiver介绍介绍n 广播是一种广泛运用在应用程序之间传输信息的机制,而BroadcastReceiverBroadcastReceiver是对发送出来的广播进行过滤接收并响应的一类组件。n BroadcastReceiver 本质上是一种全局监听器全局监听器,用于监听系统全局的广播消息,因此它可以非常方便地实现系统中不同组件之间的通信。n BroadcastReceiver用于接收指定的广播接收指定的广播,广播的发送是通过调用Context.sendBroadcast()sendBroadcast()、Context.sendOrderedBroadcatsendOrderedBroadcat()()来实现的。通常一个广播可以被订阅了该Intent的多个广播接收者所接收,如同一个广播台,可以被多位听众收听一样。9.1 BroadcastReceiver9.1 BroadcastReceiver介绍介绍 BroadcastReceiver自身并不实现图形用户界面不实现图形用户界面,但是当它收到某个消息后,可以启动启动ActivityActivity作为响应作为响应,或者通过NotificationManagerNotificationManager提醒用户提醒用户,或者启动启动ServiceService等等。启动启动BroadcastReceiverBroadcastReceiver通常通常需要以下两步需要以下两步:1、创建Intent,指定BroadcastReceiver的特征;2、调用Context的sendBroadcast()sendBroadcast()(发送普通广播发送普通广播)或sendOrderedBroadcastsendOrderedBroadcast()()(发送有序广播发送有序广播)方法来发送广播,触发指定的BroadcastReceiver。当应用程序发出一个广播之后,所有匹配该Intent的BroadcastReceiver都有可能被启动。9.1 BroadcastReceiver9.1 BroadcastReceiver介绍介绍 开发自己的BroadcastReceiver与开发其他组件一样,只需要继承只需要继承AndroidAndroid中的中的BroadcastReceiverBroadcastReceiver基类基类,然后实现实现里面的相关方法里面的相关方法即可。public class MyBroadcastReceiver extendsextends BroadcastReceiverBroadcastReceiver public voidpublic void onReceive onReceive(Context context,(Context context,IntentIntent intent)intent)在onReceive()onReceive()方法中,接收了一个IntentIntent的参数,通过它可以获取广播获取广播所携带的数据所携带的数据。9.1 BroadcastReceiver9.1 BroadcastReceiver介绍介绍 创建完广播接收者后,并不能马上使用,还必须为它注册注册一个指定的广播一个指定的广播,就如同我们有了收音机后,还必须选择收听哪个频道一样。在Android中为BroadcastReceiver注册广播有两种方式:静态注册静态注册和动态注册动态注册。receiver action =静态注册:静态注册:是指在AndroidManifest.xmlAndroidManifest.xml文件中进行注册。9.1 BroadcastReceiver9.1 BroadcastReceiver介绍介绍MyBroadcastReceiver myBroadcastReceiver=new MyBroadcastReceiver();IntentFilter filter=new IntentFilter();registerReceiver(myBroadcastReceiver,filter);动态动态注册:注册:需要在代码中动态的指定广播地址并注册动态的指定广播地址并注册,通常是在Activity或Service中调用ContextWrapper的registerReceiverregisterReceiver(BroadcastReceiverBroadcastReceiver receiver,IntentFilterIntentFilter filter)方法进行注册注册。9.1 BroadcastReceiver9.1 BroadcastReceiver介绍介绍 注册完成后,即可接收相应的广播消息接收相应的广播消息。一旦广播(Broadcast)事件发生后,系统就会创建对应的创建对应的BroadcastReceiverBroadcastReceiver实例实例,并自动触发自动触发它的onReceive()onReceive()方法,onReceive()方法执行完后执行完后,BroadcastReceiverBroadcastReceiver的实例就会被销毁被销毁。如果BroadcastReceiver的onReceive()onReceive()方法不能在1010秒秒内执行完成内执行完成,Android会认为该程序无响应该程序无响应。所以不要在广播接收者的onReceive()方法里执行一些耗时的操作,否则会弹出ANRANR(Application No ResponseApplication No Response)对话框。注意注意u 如果确实需要根据广播来完成一项比较耗时的操作完成一项比较耗时的操作,则可以考虑通过通过IntentIntent启动一个启动一个ServiceService来完成该操作。不应考虑使用新线程不应考虑使用新线程去完成耗时的操作,因为BroadcastReceiver本身的生命周期极短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经退出了。u 如果广播接收者所在的进程结束了,虽然该进程内还有用户启动的新线程,但由于该进程内不包含任何活动组件,因此系统可能在内存紧张时优先结束线程优先结束线程。这样就可能导致BroadcastReceiver启动的子线程不能执行完成子线程不能执行完成。9.2 发送广播的两种方式发送广播的两种方式 广播接收者注册好了以后,并不会直接运行,必须在接收广播后才会被调用,因此,必须首先发送广播,在Android中提供了两种发送广播的方式,调用Context的sendBroadcastsendBroadcast()()或sendOrderedBroadcast()sendOrderedBroadcast()方法。sendBroadcast(Intent intent)sendBroadcast(Intent intent):用于发送普通广播普通广播,其中intent参数表示接收该广播的广播接收者所需要满足的条件,以及广播所传递的数据;sendOrderedBroadcastsendOrderedBroadcast(Intent intent,String receiverPermission):用于发送有序广播发送有序广播,intent参数同上,receiverPermission表示接收该广播的许可权限广播的许可权限。9.2 发送广播的两种方式发送广播的两种方式u 普通广播普通广播(Normal BroadcastNormal Broadcast):是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。u 有序广播有序广播(Ordered BroadcastOrdered Broadcast):该广播的接收者将按预先声明的优先级依次接收广播优先级依次接收广播。有序广播接收者可以终止广播的传播(通过调用abortBroadcast()方法),广播的传播一旦终止,后面的接收者就无法接收到广播。另外,广播的接收者可以将数据传递给下一个接收者(通过setResultExtras(Bundle bundle)setResultExtras(Bundle bundle)方法)。发送有序广播示例public class ABroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,“A is Invoked!”,Toast.LENGTH_SHORT).show();public class BBroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,“B is Invoked!”,Toast.LENGTH_SHORT).show();编写三个广播接收器类,分别为:ABroadcastReceiver、BBroadcastReceiver、CBroadcastReceiver,内容为显示相应提示信息public class CBroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,“C is Invoked!”,Toast.LENGTH_SHORT).show();在清单文件中注册广播接收器尝试改变优先级大小,观看效果尝试改变优先级大小,观看效果public class MainActivity extends Activity public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent=new Intent();sendOrderedBroadcast(intent,null);发送普通广播和发送有序广播对比发送有序广播发送有序广播public class MainActivity extends Activity public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent=new Intent();sendBroadcast(intent);发送普通广播发送普通广播public class BBroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Bundle bundle=getResultExtras(true);Toast.makeText(context,“B is Invoked!”+“得到的信息得到的信息”+bundle.getString(“A”),Toast.LENGTH_SHORT).show();有序广播中,广播接收器间传递数据public class ABroadcastReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)Toast.makeText(context,A is Invoked!,Toast.LENGTH_SHORT).show();Bundle bundle=new Bundle();bundle.putString(“A”,“the message of A”);/在广播中添加数据在广播中添加数据setResultExtras(bundle);ABroadcastReceiver广播接收器接收广播后,向其中添加数据向其中添加数据。BBroadcastReceiver广播接收器接收广播后,获取数据获取数据。9.3 案例案例音乐播放器音乐播放器基于基于ServiceService的音乐播放器的音乐播放器 程序的音乐将会由后台运行的后台运行的ServiceService组件负责播放组件负责播放,当后台的播放状态播放状态发生改变时,程序将会通过发送广播通知前发送广播通知前台台ActivityActivity更新界面更新界面;当用户单击前台单击前台ActivityActivity的界面按钮的界面按钮时时,系统将通过发送广播通知后台发送广播通知后台ServiceService来改变播放状态来改变播放状态。此程序中包含两个BroadcastReceiverBroadcastReceiver(广播接收器)和一个ServiceService服务服务。一个广播接收器用于一个广播接收器用于接收播放状态发生改变的广播接收播放状态发生改变的广播;一个广播接收器用于接收歌曲播放完成时发送的广播接收歌曲播放完成时发送的广播。9.3 案例案例音乐播放器音乐播放器9.3 案例案例音乐播放器音乐播放器开发步骤开发步骤 1、Activity的界面布局界面布局,在Activity中内嵌一个广播接收器ActivityReceiver,用于接收来自Service的广播。2、为相应的按钮添加单击事件添加单击事件,在单击事件中发送广播;3、开发音乐播放的服务音乐播放的服务(MusicService),并在服务中内嵌一个广播接收器ServiceReceiver,用于接收来自Activity的广播;4、分别编写广播接收器的业务逻辑处理广播接收器的业务逻辑处理;案例分析案例分析9.3 音乐播放器示例音乐播放器示例public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);stop=(ImageButton)findViewById(R.id.stop);play=(ImageButton)findViewById(R.id.play);title=(TextView)findViewById(R.id.title);author=(TextView)findViewById(R.id.author);/根据根据Id找到相应的控件找到相应的控件 MyListener myListener=new MyListener();play.setOnClickListener(myListener);stop.setOnClickListener(myListener);/为播放和停止按钮添加事件监听为播放和停止按钮添加事件监听 activityReceiver=new ActivityReceiver();/创建广播接收器创建广播接收器 IntentFilter intentFilter=new IntentFilter(.ActivityReceiver);/广播接收器接收广播的过滤条件广播接收器接收广播的过滤条件 registerReceiver(activityReceiver,intentFilter);/注册广播接受器注册广播接受器 Intent intent=new Intent(MainActivity.this,MusicService.class);/显显式式调用服务调用服务 startService(intent);/启动服务启动服务 在MainActivity中执行一些初始化的操作,例如获取界面控件获取界面控件、添加添加事件处理事件处理、注册广播接收器注册广播接收器、启动服务启动服务等。音音乐乐播播放放器器示示例例public class ActivityReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)int update=intent.getIntExtra(update,-1);/获取音乐播放状态获取音乐播放状态 int current=intent.getIntExtra(current,-1);/获取当前播放的音乐的序号获取当前播放的音乐的序号if(current=0)title.setText(titlescurrent);/显示歌曲信息显示歌曲信息author.setText(authorscurrent);/显示演唱者信息显示演唱者信息switch(update)/判断音乐播放状态判断音乐播放状态case 0 x11:/处于未开始状态,则显示播放按钮处于未开始状态,则显示播放按钮play.setImageResource(R.drawable.play);break;case 0 x12:/处于播放状态,则显示暂停按钮处于播放状态,则显示暂停按钮play.setImageResource(R.drawable.pause);break;case 0 x13:/处于暂停状态,则显示播放按钮处于暂停状态,则显示播放按钮play.setImageResource(R.drawable.play);break;default:break;Activity中的广播接收器,用于改变界面中播中的广播接收器,用于改变界面中播放按钮的背景图片,以及显示的歌曲的信息。放按钮的背景图片,以及显示的歌曲的信息。音乐播放器示例音乐播放器示例private class MyListener implements OnClickListener/播放和停止按钮的事件处理播放和停止按钮的事件处理 public void onClick(View v)Intent intent=new Intent(“.ServiceReceiver”);/广播所触发的接收器的条件广播所触发的接收器的条件switch(v.getId()case:/单击的播放按钮单击的播放按钮intent.putExtra(control,1);/传递值为传递值为1break;case:/单击停止按钮单击停止按钮intent.putExtra(control,2);/传递值为传递值为2break;default:break;sendBroadcast(intent);/发送广播发送广播 播放和停止按钮的事件处理监听器。播放和停止按钮的事件处理监听器。音乐播放器示例音乐播放器示例public IBinder onBind(Intent intent)/继承服务基类的抽象方法继承服务基类的抽象方法return null;public void onCreate()/执行服务的初始化操作执行服务的初始化操作serviceReceiver=new ServiceReceiver();/创建广播接收器创建广播接收器IntentFilter intentFilter=new IntentFilter(.ServiceReceiver);/广播接收器触发的条件广播接收器触发的条件registerReceiver(serviceReceiver,intentFilter);/注册广播接收器注册广播接收器super.onCreate();音乐播放服务类必须实现的方法,以及初始化。音乐播放服务类必须实现的方法,以及初始化。音音乐乐播播放放器器示示例例public class ServiceReceiver extends BroadcastReceiver public void onReceive(Context context,Intent intent)int control=intent.getIntExtra(control,-1);/获取是播放还是停止的值获取是播放还是停止的值switch(control)case 1:/如果单击的是播放,则需要判断当前音乐播放的状态如果单击的是播放,则需要判断当前音乐播放的状态if(status=0 x11)/如果是未开始状态如果是未开始状态 repareAndPlay(current);status=0 x12;else if(status=0 x12)/如果是如果是播放播放状态状态 mediaPlayer.pause();status=0 x13;else if(status=0 x13)/如果是如果是暂停暂停状态状态 mediaPlayer.start();status=0 x12;break;case 2:/如果单击的是停止如果单击的是停止if(status=0 x12|status=0 x13)/如果处于播放或暂停状态如果处于播放或暂停状态 mediaPlayer.stop();/停止音乐播放停止音乐播放 status=0 x11;/改变音乐当前的状态改变音乐当前的状态break;default:break;Intent sendIntent=new Intent(.ActivityReceiver);sendIntent.putExtra(update,status);/传递当前状态值传递当前状态值sendIntent.putExtra(current,current);/传递当前播放的音乐的序号传递当前播放的音乐的序号sendBroadcast(sendIntent);/发送广播发送广播 Service中的广播接收器,用于控制音乐的播中的广播接收器,用于控制音乐的播放、暂停以及停止。放、暂停以及停止。音音乐乐播播放放器器示示例例public void prepareAndPlay(int index)/准备和播放音乐准备和播放音乐 try mediaPlayer=MediaPlayer.create(this,musicsindex);/创建媒体播放器创建媒体播放器 mediaPlayer.setOnCompletionListener(new OnCompletionListener()/监听音乐播放结束事件监听音乐播放结束事件public void onCompletion(MediaPlayer mp)current+;/播放下一首播放下一首 if(current=musics.length)/如果已是最后一首,则播放第一首如果已是最后一首,则播放第一首current=0;Intent sendIntent=new Intent(.ActivityReceiver);sendIntent.putExtra(current,current);/传递当前播放的音乐序号传递当前播放的音乐序号 sendBroadcast(sendIntent);/发送广播发送广播 prepareAndPlay(current);/准备和播放当前歌曲准备和播放当前歌曲 );if(mediaPlayer!=null)mediaPlayer.stop();mediaPlayer.prepare();mediaPlayer.start();/播放音乐播放音乐 catch(Exception ex)ex.printStackTrace();案例分析案例分析音乐播放器示例音乐播放器示例注意事项注意事项 1、音乐播放存在三种状态:未开始未开始、正在播放正在播放、暂停暂停,可以使用常量进行标记,0 x110 x11代表未开始未开始;0 x120 x12代表正在播正在播放放;0 x130 x13代表暂停。暂停。2、需在清单文件中对播放音乐的服务服务进行注册注册;3、为了使广播接收器能够方便的访问Activity或Service中的成员,建议将广播接收器作为它们的内部类它们的内部类;4、音乐播放需要使用到MediaPlayerMediaPlayer类;

    注意事项

    本文(【教学课件】第9章BroadcastReceiver的使用.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开