资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
任务十九、广播任务十九、广播任务十九、广播任务十九、广播(gungb)(gungb)接收程接收程接收程接收程序序序序第一页,共27页。本章(bn zhn)任务第二页,共27页。本章相关(xinggun)词汇(蓝色为关键字)单 词说 明broadcast广播receive接收第三页,共27页。目标目标掌握发送和接收广播消息(xio xi)的方法第四页,共27页。什么(shn me)是广播?第五页,共27页。每个广播电台播放的内容都不相同。接受广播时广播(发送方)并不在意我们(接收(jishu)方)接收(jishu)到广播时如何处理。好比我们收听交通电台的广播,电台中告诉我们现在在交通状况如何,但它并不关心我们接收(jishu)到广播时做如何做出处理,这不是广播应该关心的问题。第六页,共27页。1.1 广播(gungb)消息广播消息Intent的另一种用途是发送广播消息应用程序和Android系统都可以使用Intent发送广播消息广播消息的内容可以是与应用程序密切相关的数据信息,也可以是Android的系统信息,例如网络连接变化、电池电量变化、接收到短信和系统设置变化等等如果(rgu)应用程序注册了BroadcastReceiver,则可以接收到指定的广播消息第七页,共27页。1.1 广播(gungb)消息广播信息的使用方法创建一个Intent注意:在构造Intent时必须(bx)用一个全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名称调用sendBroadcast()函数,就可把Intent携带的消息广播出去如果要在Intent传递额外数据,可以用Intent的putExtra()方法第八页,共27页。1.1 广播(gungb)消息利用Intent发送广播消息(xio xi),并添加了额外的数据,然后调用sendBroadcast()发生了广播消息(xio xi)的代码1.String UNIQUE_STRING = “com.newer.BroadcastReceiverDemo;2.Intent intent = new Intent(UNIQUE_STRING);3.intent.putExtra(key1, value1);4.intent.putExtra(key2, value2);5.sendBroadcast(intent);第九页,共27页。1.1 广播(gungb)消息BroadcastReceiverBroadcastReceiver用于监听(jin tn)广播消息可以在AndroidManifest.xml文件或在代码中注册一个BroadcastReceiver,并在其中使用Intent 过滤器指定要处理的广播消息创建BroadcastReceiver需继承BroadcastReceiver类,并重载onReceive()方法。代码如下1.public class MyBroadcastReceiver extends BroadcastReceiver 2.Override3.public void onReceive(Context context, Intent intent) 4./TODO: React to the Intent received.5.6.第十页,共27页。1.1 广播(gungb)消息1.BroadcastReceiver的应用程序不需要一直运行,当Android系统接收到与之匹配的广播消息时,会自动启动此BroadcastReceiver2.基于以上的特征,BroadcastReceiver适合做一些资源管理的工作3.在BroadcastReceiver接收到与之匹配的广播消息后,onReceive()方法会被调用4.onReceive()方法必须要在5秒钟执行完毕(wnb),否则Android系统会认为该组件失去响应,并提示用户强行关闭该组件第十一页,共27页。1.1 广播(gungb)消息1.BroadcastReceiverDemo示例说明了如何在应用程序中注册BroadcastReceiver,并接收指定类型的广播消息2.在点击“发生广播消息”按钮后,EditText控件中内容将以广播消息的形式发送出去(ch q),3.示例内部的BroadcastReceiver将接收这个广播消息,并显示在用户界面的下方第十二页,共27页。1.1 广播(gungb)消息1.BroadcastReceiverDemo.java文件中包含(bohn)发送广播消息的代码,其关键代码如下2.第3行代码创建Intent,将com.newer.BroadcastReceiverDem作为识别广播消息的字符串标识3.第4行代码添加了额外信息4.第5行代码调用sendBroadcast()函数发送广播消息1.button.setOnClickListener(new OnClickListener()2.public void onClick(View view)3.Intent intent = new Intent(“com.newer.BroadcastReceiverDemo);4.intent.putExtra(message, entryText.getText().toString();5.sendBroadcast(intent);6.7.);第十三页,共27页。1.1 广播(gungb)消息1.为了能够(nnggu)使应用程序中的BroadcastReceiver接收指定的广播消息,首先要在AndroidManifest.xml文件中添加Intent过滤器,声明BroadcastReceiver可以接收的广播消息2.AndroidManifest.xml文件的完整代码如下1.2.6.7.9.10.11.12.第十四页,共27页。1.1 广播(gungb)消息第14行代码中创建了一个节点在第15行中声明了Intent过滤器的动作为“com.newer.BroadcastReceiverDemo”,这与BroadcastReceiverDemo.java文件中Intent的动作相一致,表明这个(zh ge)BroadcastReceiver可以接收动作为“com.newer.BroadcastReceiverDemo”的广播消息13. 14.15. 16.17. 18. 19. 20. 21. 第十五页,共27页。1.1 广播(gungb)消息1.MyBroadcastReceiver.java文件(wnjin)创建了一个自定义的BroadcastReceiver,其核心代码如下2.第1行代码首先继承了BroadcastReceiver类3.第3行代码重载了onReveive()函数。当接收到AndroidManifest.xml文件(wnjin)定义的广播消息后,程序将自动调用onReveive()函数1.public class MyBroadcastReceiver extends BroadcastReceiver 2.Override3.public void onReceive(Context context, Intent intent) 4.String msg = intent.getStringExtra(message);5.Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();6.7.第十六页,共27页。1.1 广播(gungb)消息第4行代码通过调用getStringExtra()函数,从Intent中获取标识为message的字符串数据,并使用Toast将信息显示在屏幕上第5行代码的Toast是一个显示提示信息的类,调用makeText()函数可将提示信息短时间的浮现在用户界面之上makeText()函数的第1个参数是上下文信息第2个参数是需要(xyo)显示的提示信息第3个参数是显示的时间,Toast.LENGTH_SHORT表示短时间显示,Toast.LENGTH_LONG表示长时间显示;最后调用show()方法将提示信息实际显示在界面之上第十七页,共27页。系统(xtng)广播接收器android.os.BatteryManager第十八页,共27页。registerReceiver()方法。第1个参数,设置BroadcastReceiver实例第2个参数,设置注册(zhc)Intent.ACTION_BATTERY_CHANGED处理的IntentFilter实例。第十九页,共27页。在BroadcastReceiver的onReceive()事件,接收到电池信息Intent.ACTION_BATTERY_CHANGED,包括下面的信息。“status”(int类型)状态(zhungti),定义值是第二十页,共27页。BatteryManager.BATTERY_STATUS_XXX。“health”(int类型)健康,定义值是BatteryManager.BATTERY_HEALTH_XXX。“present”(boolean类型)“level”(int类型)电池(dinch)剩余容量“scale”(int类型)电池(dinch)最大值。通常为100。“icon-small”(int类型)图标ID。“plugged”(int类型)连接的电源插座,定义值是BatteryManager.BATTERY_PLUGGED_XXX。“voltage”(int类型)mV。“temperature”(int类型)温度,0.1度单位。例如 表示197的时候,意思为19.7度。 “technology”(String类型)电池(dinch)类型,例如,Li-ion等等。第二十一页,共27页。系统广播可以捕捉(bzhu)系统发出的行为有: 1.“android.provider.Telephony.SMS_RECEIVED” 收到短信 2. Intent.ACTION_BATTERY_CHANGED 剩余的手机电池量 3. Intent.ACTION_MEDIA_MOUNTED SD卡成功挂载 第二十二页,共27页。4. Intent.ACTION_MEDIA_UNMOUNTED SD卡未挂载 5. Intent.ACTION_NEW_OUTGOING_CALL拨打电话(dinhu) 6. Intent.ACTION_PACKAGE_ADDED执行安装 7. Intent.ACTION_PACKAGE_REMOVED 执行卸载 第二十三页,共27页。提问(twn)Receiver是接收谁发出的消息?Receiver对象(duxing)接收的消息本质上是Intent,系统内部已经定义了很多广播消息类型,例如电池电量低、屏幕开启或者关闭、系统引导完成等,系统内部广播这些消息使用的也是sendBroadcast()。多数应用中,Receiver接收的是系统发出的消息。第二十四页,共27页。如何发送广播消息启动相应的Receiver对象如第一个问题(wnt)所述,系统使用sendBroadcast()发送广播,应用程序也可以使用该方法发送广播。当系统发送这些广播后,同样经过Intent匹配找到相应的Receiver对象并启动。这与Activity或者Servcie一样。第二十五页,共27页。如何(rh)得知系统都有哪些内置的广播消息类型?系统内部定义的广播消息,可以查阅官方文档:C:androidandroid-sdk-windowsdocsreferenceandroidcontentIntent.html第二十六页,共27页。能自定义广播消息吗?当然可以自定义广播消息。自定义广播无非是给Intent对象(duxing)的Action字段赋予自定义的值而已,不能与系统内部的消息名称重复,并在Receiver对象(duxing)的intent-filter中使用相同的Action值进行匹配。一般自定义广播命名时,可以使用本程序包名作为前缀,以免与其它程序定义的广播发生命名冲突。第二十七页,共27页。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号