《任务十九广播接收程序文档资料》由会员分享,可在线阅读,更多相关《任务十九广播接收程序文档资料(27页珍藏版)》请在金锄头文库上搜索。
1、任务十九、广播接收程序任务十九、广播接收程序任务十九、广播接收程序任务十九、广播接收程序本章任务2本章相关词汇(蓝色为关键字)单 词说 明broadcast广播receive接收3目标目标掌握发送和接收广播消息的方法4什么是广播?5每个广播电台播放的内容都不相同。接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理。好比我们收听交通电台的广播,电台中告诉我们现在在交通状况如何,但它并不关心我们接收到广播时做如何做出处理,这不是广播应该关心的问题。61.1 广播消息广播消息Intent的另一种用途是发送广播消息应用程序和Android系统都可以使用Intent发送广播消息广播消息的
2、内容可以是与应用程序密切相关的数据信息,也可以是Android的系统信息,例如网络连接变化、电池电量变化、接收到短信和系统设置变化等等如果应用程序注册了BroadcastReceiver,则可以接收到指定的广播消息71.1 广播消息广播信息的使用方法创建一个Intent注意:在构造Intent时必须用一个全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名称调用sendBroadcast()函数,就可把Intent携带的消息广播出去如果要在Intent传递额外数据,可以用Intent的putExtra()方法81.1 广播消息利用Intent发送广播消息,并添加了额外的数据,然后调用se
3、ndBroadcast()发生了广播消息的代码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);91.1 广播消息BroadcastReceiverBroadcastReceiver用于监听广播消息可以在AndroidManifest.xml文件或在代码中注册一个Bro
4、adcastReceiver,并在其中使用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.101.1 广播消息BroadcastReceiver的
5、应用程序不需要一直运行,当Android系统接收到与之匹配的广播消息时,会自动启动此BroadcastReceiver基于以上的特征,BroadcastReceiver适合做一些资源管理的工作在BroadcastReceiver接收到与之匹配的广播消息后,onReceive()方法会被调用onReceive()方法必须要在5秒钟执行完毕,否则Android系统会认为该组件失去响应,并提示用户强行关闭该组件111.1 广播消息BroadcastReceiverDemo示例说明了如何在应用程序中注册BroadcastReceiver,并接收指定类型的广播消息在点击“发生广播消息”按钮后,EditT
6、ext控件中内容将以广播消息的形式发送出去,示例内部的BroadcastReceiver将接收这个广播消息,并显示在用户界面的下方1.1 广播消息BroadcastReceiverDemo.java文件中包含发送广播消息的代码,其关键代码如下第3行代码创建Intent,将com.newer.BroadcastReceiverDem作为识别广播消息的字符串标识第4行代码添加了额外信息第5行代码调用sendBroadcast()函数发送广播消息1.button.setOnClickListener(new OnClickListener()2.public void onClick(View vi
7、ew)3.Intent intent = new Intent(“com.newer.BroadcastReceiverDemo);4.intent.putExtra(message, entryText.getText().toString();5.sendBroadcast(intent);6.7.);131.1 广播消息为了能够使应用程序中的BroadcastReceiver接收指定的广播消息,首先要在AndroidManifest.xml文件中添加Intent过滤器,声明BroadcastReceiver可以接收的广播消息AndroidManifest.xml文件的完整代码如下1.2.
8、6.7.9.10.11.12.141.1 广播消息第14行代码中创建了一个节点在第15行中声明了Intent过滤器的动作为“com.newer.BroadcastReceiverDemo”,这与BroadcastReceiverDemo.java文件中Intent的动作相一致,表明这个BroadcastReceiver可以接收动作为“com.newer.BroadcastReceiverDemo”的广播消息13. 14.15. 16.17. 18. 19. 20. 21. 151.1 广播消息MyBroadcastReceiver.java文件创建了一个自定义的BroadcastReceive
9、r,其核心代码如下第1行代码首先继承了BroadcastReceiver类第3行代码重载了onReveive()函数。当接收到AndroidManifest.xml文件定义的广播消息后,程序将自动调用onReveive()函数1.public class MyBroadcastReceiver extends BroadcastReceiver 2.Override3.public void onReceive(Context context, Intent intent) 4.String msg = intent.getStringExtra(message);5.Toast.makeTe
10、xt(context, msg, Toast.LENGTH_SHORT).show();6.7.161.1 广播消息第4行代码通过调用getStringExtra()函数,从Intent中获取标识为message的字符串数据,并使用Toast将信息显示在屏幕上第5行代码的Toast是一个显示提示信息的类,调用makeText()函数可将提示信息短时间的浮现在用户界面之上lmakeText()函数的第1个参数是上下文信息l第2个参数是需要显示的提示信息l第3个参数是显示的时间,Toast.LENGTH_SHORT表示短时间显示,Toast.LENGTH_LONG表示长时间显示;最后调用show(
11、)方法将提示信息实际显示在界面之上17系统广播接收器android.os.BatteryManager18registerReceiver()方法。第1个参数,设置BroadcastReceiver实例第2个参数,设置注册Intent.ACTION_BATTERY_CHANGED处理的IntentFilter实例。19在BroadcastReceiver的onReceive()事件,接收到电池信息Intent.ACTION_BATTERY_CHANGED,包括下面的信息。“status”(int类型)状态,定义值是20BatteryManager.BATTERY_STATUS_XXX。“hea
12、lth”(int类型)健康,定义值是BatteryManager.BATTERY_HEALTH_XXX。“present”(boolean类型)“level”(int类型)电池剩余容量“scale”(int类型)电池最大值。通常为100。“icon-small”(int类型)图标ID。“plugged”(int类型)连接的电源插座,定义值是BatteryManager.BATTERY_PLUGGED_XXX。“voltage”(int类型)mV。“temperature”(int类型)温度,0.1度单位。例如 表示197的时候,意思为19.7度。 “technology”(String类型)电
13、池类型,例如,Li-ion等等。21系统广播可以捕捉系统发出的行为有: 1.“android.provider.Telephony.SMS_RECEIVED” 收到短信 2. Intent.ACTION_BATTERY_CHANGED 剩余的手机电池量 3. Intent.ACTION_MEDIA_MOUNTED SD卡成功挂载 224. Intent.ACTION_MEDIA_UNMOUNTED SD卡未挂载 5. Intent.ACTION_NEW_OUTGOING_CALL拨打电话 6. Intent.ACTION_PACKAGE_ADDED执行安装 7. Intent.ACTION_P
14、ACKAGE_REMOVED 执行卸载 23提问Receiver是接收谁发出的消息?Receiver对象接收的消息本质上是Intent,系统内部已经定义了很多广播消息类型,例如电池电量低、屏幕开启或者关闭、系统引导完成等,系统内部广播这些消息使用的也是sendBroadcast()。多数应用中,Receiver接收的是系统发出的消息。24如何发送广播消息启动相应的Receiver对象如第一个问题所述,系统使用sendBroadcast()发送广播,应用程序也可以使用该方法发送广播。当系统发送这些广播后,同样经过Intent匹配找到相应的Receiver对象并启动。这与Activity或者Servcie一样。25如何得知系统都有哪些内置的广播消息类型?系统内部定义的广播消息,可以查阅官方文档:C:androidandroid-sdk-windowsdocsreferenceandroidcontentIntent.html26能自定义广播消息吗?当然可以自定义广播消息。自定义广播无非是给Intent对象的Action字段赋予自定义的值而已,不能与系统内部的消息名称重复,并在Receiver对象的intent-filter中使用相同的Action值进行匹配。一般自定义广播命名时,可以使用本程序包名作为前缀,以免与其它程序定义的广播发生命名冲突。27