broadcast,broadcastReceiver
来源:互联网 发布:java培训哪个机构好 编辑:程序博客网 时间:2024/06/15 15:37
在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver
活动(Activity) - 用于表现功能
服务(Service) - 相当于后台运行的 Activity
广播(Broadcast) - 用于发送广播
广播接收器(BroadcastReceiver) - 用于接收广播
Intent - 用于连接以上各个组件,并在其间传递消息
==========================================================================
BroadcastReceiver:
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程:
首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。
当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。
注册BroadcastReceiver有两种方式:
一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。
另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,如果取消时就调用 Context.unregisterReceiver()方法。如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)
另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。
1.静态注册BroadcastReceiver:
静态注册比动态注册麻烦点,先新建一个类继承BroadcastReceiver,如:
clsReceiver2.java
package com.testBroadcastReceiver; import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast; /* * 接收静态注册广播的BroadcastReceiver, * step1:要到AndroidManifest.xml这里注册消息 * <receiver android:name="clsReceiver2"> <intent-filter> <action android:name="com.testBroadcastReceiver.Internal_2"/> </intent-filter> </receiver> step2:定义消息的字符串 step3:通过Intent传递消息来驱使BroadcastReceiver触发 */public class clsReceiver2 extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Toast.makeText(context, "静态:"+action, 1000).show(); }}
然后到AndroidManifest.xml 添加receive标签
<receiver android:name="clsReceiver2"> <intent-filter> <action android:name="com.testBroadcastReceiver.Internal_2"/> </intent-filter> </receiver>
第一个name是类名,即你的继承BroadcastReceiver的类的名字,里面实现了BroadcastReceive的onReceive()方法,来处理你接到消息的动作。
第二个name是action的名称,即你要监听的消息名字(其它消息都会被过滤不监听)。
2.动态注册BroadcastReceiver:
主要代码部分为:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(String); //为BroadcastReceiver指定action,即要监听的消息名字。
registerReceiver(MyBroadcastReceiver,intentFilter); //注册监听
unregisterReceiver(MyBroadcastReceiver); //取消监听
(一般:在onStart中注册,onStop中取消unregisterReceiver)
private class MyBroadcastReceive extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if(intent.ACTION_BATTERY_CHANGED.equals(action)) //判断是否接到电池变换消息
{
//处理内容
}
}
}
========================================================================
Broadcast:
发送广播消息,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。
例如:
Intent intent = new Intent(INTENAL_ACTION_3);intent.putExtra("Name", "hellogv");intent.putExtra("Blog", "http://blog.csdn.net/hellogv");sendBroadcast(intent);//传递过去
- broadcast,broadcastReceiver
- Broadcast 和 BroadcastReceiver
- android:Broadcast&BroadcastReceiver
- [android]Broadcast与BroadcastReceiver
- broadcast broadcastreceiver使用
- Broadcast和BroadCastReceiver
- Android Broadcast and BroadcastReceiver
- AMS-Broadcast和BroadcastReceiver
- Android之Broadcast, BroadcastReceiver(广播)
- Android之Broadcast, BroadcastReceiver(广播)
- Android之Broadcast与BroadcastReceiver
- Android广播:Broadcast与BroadcastReceiver
- android 广播机制Broadcast、BroadcastReceiver用法解读
- android 之 Broadcast(广播) BroadcastReceiver(广播接收者)
- Android Broadcast 和 BroadcastReceiver的权限限制
- Android之Broadcast, BroadcastReceiver(广播)
- Android之Broadcast, BroadcastReceiver(广播)
- Android之Broadcast, BroadcastReceiver(广播)
- line 103: can't open /r/dev/console: no such file
- 内核调试函数printk()
- linux中可重入函数 sig_automaic
- 推荐一些C#相关的网站、资源和书籍
- rebuild table online
- broadcast,broadcastReceiver
- Python学习笔记(十二)----Python continue 语句
- asp.net mvc 3.0详细笔记__03__项目文件结构详解_Controllers
- 辽宁警察错抓黑龙江官员后登门道歉并赔偿1.5万
- Chapter 6. MATLAB数值计算基础
- 动态规划之背包问题
- Java EE HTML5 WebSocket 编码器与解码器的例子
- html5中页面拨打电话的方式
- 烧写uboot到nand中