- 浏览: 874596 次
- 性别:
- 来自: 北京
最新评论
-
luna_2006:
...
【Java】枚举类型Enum介绍和方法详解 -
沙漠孤影:
...
【Android】Android Market 链接的生成与分享 -
sjl_008:
有错误,inSampleSize 为2时,图片大小不是原来的2 ...
【Android】如何解决bitmap 内存溢出out of memory的问题 -
huanglei_jay:
【Java】Collections.EMPTY_LIST和Collections.emptyList()简单使用心得 -
wuxuewujiang:
很详细!很有用的整理。
【Objective-C】NSDate详解及获取当前时间等常用操作
【Android】BroadcastReceiver简介和用法实例,两种注册方式 (二)
- 博客分类:
- Android
一.BroadcastReceiver简介
BraodcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,它和事件处理机制类似,但是事件处理机制是程序组件级别的,而广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试手机电量的变化,这时候就可以定义一个BraodcastReceiver来接受广播,当手机电量较低时提示用户。我们既可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。我们同样可以在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。
在程序中使用BraodcastReceiver是比较简单的。首先要定义一个类继承BraodcastReceiver,并且覆盖onReceiver()方法来响应事件。然后注册在程序中BraodcastReceiver。最后构建Intent对象调用sendBroadcast()方法将广播发出。
二.BroadcastReceiver的注册方式
1.静态注册方式
静态注册方式是在AndroidManifest.xml的application里面定义receiver并设置要接收的action。静态注册方式的特点:不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听内存 的使用情况的,当在手机上安装好后,不管改应用程序是处于什么状态,都会执行改监听方法中的内容。
下面是具体的例子:
MainActivity.java
- package com.android.broadcast;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity{
- //定义action常量
- protected static final String ACTION = "com.android.broadcast.RECEIVER_ACTION";
- //定义Button对象
- private Button btnBroadcast;
- @Override
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btnBroadcast=(Button)findViewById(R.id.btnBroadcast);
- //为按钮设置单击监听器
- btnBroadcast.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- //实例化Intent
- Intent intent=new Intent();
- //设置Intent的action属性
- intent.setAction(ACTION);
- //发出广播
- sendBroadcast(intent);
- }
- });
- }
- }
在“com.android.broadcast”包中定义一个MyReceiver类,继承于BroadcastReceiver,覆盖onReceive()方法。
MyReceiver.java
- package com.android.broadcast;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- public class MyReceiver extends BroadcastReceiver{
- //定义日志标签
- private static final String TAG = "Test";
- @Override
- public void onReceive(Context context, Intent intent){
- //输出日志信息
- Log.i(TAG, "MyReceiver onReceive--->");
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/btnBroadcast"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="发送Broadcast"
- />
- </LinearLayout>
在AndroidManifest.xml配置文件中16~20行声明receiver
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.broadcast"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="10" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".MainActivity"
- android:label="@string/app_name">
- <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.android.broadcast.RECEIVER_ACTION"/>
- </intent-filter>
- </receiver>
- </application>
- </manifest>
效果图:
当我们点击按钮的时候,程序会调用onReceive()方法,LogCat输出信息如下:
2.动态注册方式
动态注册方式在activity里面调用函数来注册,和静态的内容差不多。一个形参是receiver,另一个是IntentFilter,其中里面是要接收的action。动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。
下面是具体的例子:
MainActivity.java
- package com.android.broadcast;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity{
- //定义Action常量
- protected static final String ACTION = "com.android.broadcast.RECEIVER_ACTION";
- private Button btnBroadcast;
- private Button registerReceiver;
- private Button unregisterReceiver;
- private MyReceiver receiver;
- @Override
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btnBroadcast=(Button)findViewById(R.id.btnBroadcast);
- //创建事件监听器
- btnBroadcast.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- Intent intent=new Intent();
- intent.setAction(ACTION);
- sendBroadcast(intent);
- }
- });
- registerReceiver=(Button)findViewById(R.id.btnregisterReceiver);
- //创建事件监听器
- registerReceiver.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- receiver=new MyReceiver();
- IntentFilter filter=new IntentFilter();
- filter.addAction(ACTION);
- //动态注册BroadcastReceiver
- registerReceiver(receiver, filter);
- }
- });
- unregisterReceiver=(Button)findViewById(R.id.btnunregisterReceiver);
- //创建事件监听器
- unregisterReceiver.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- //注销BroadcastReceiver
- unregisterReceiver(receiver);
- }
- });
- }
- }
在“com.android.broadcast”包中定义一个MyReceiver类,继承于BroadcastReceiver,覆盖onReceive()方法。
MyReceiver.java
- package com.android.broadcast;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- public class MyReceiver extends BroadcastReceiver{
- //定义日志标签
- private static final String TAG = "Test";
- @Override
- public void onReceive(Context context, Intent intent){
- //输出日志信息
- Log.i(TAG, "MyReceiver onReceive--->");
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/btnBroadcast"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="发送广播"
- />
- <Button
- android:id="@+id/btnregisterReceiver"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="注册广播接收器"
- />
- <Button
- android:id="@+id/btnunregisterReceiver"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="注销广播接听器"
- />
- </LinearLayout>
效果图:
①当我们首先点击按钮的时候,因为程序没有注册BraodcastReceiver,所以LogCat没有输出任何信息。
②当我们先点击再点击按钮的时候,这时程序会动态的注册BraodcastReceiver,之后会调用onReceive()方法,LogCat输出信息如下:
③当我们点击按钮的时候,这时程序会注销BraodcastReceiver,再点击,LogCat没有输出任何信息。
三.BroadcastReceiver 的生命周期
一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。
本文出自 “IT的点点滴滴” 博客,请务必保留此出处http://liangruijun.blog.51cto.com/3061169/655885
发表评论
-
【Android】监听SDCard安装和卸载的代码片段(测试通过)
2012-03-21 18:39 2230// 监听类 private final Bro ... -
【Android】实现XML解析的几种技术
2012-03-16 16:52 3385本文介绍在Android平台中实现对XML的三种 ... -
【Android】AlarmManager简介
2012-03-15 20:15 2030AlarmManager 包含的主要方法: ... -
【Android】AlarmManager深入学习
2012-03-15 20:13 2036对应AlarmManage有一个AlarmManager ... -
【Android】this和this.getApplictionContext的区别 (转载)
2012-03-08 15:30 2857在android中常常会遇到与context有关的内容, ... -
【Android】在QQ通讯录,360之前拦截短信(intent-filter的优先级)
2012-06-26 11:28 3418原文:http://www.bangchui.org/sim ... -
【Android】xml文件里面出现unbound prefix的问题
2012-02-06 15:25 39341相信有很多菜鸟在编写xml文件的时候,都会遇 ... -
【Android】模拟器启动不了 emulator: ERROR: unknown virtual device name
2012-02-06 15:24 3069很多人在配置android环境的时候卡了壳,一切准备工作 ... -
【Android】Intent 和 Intent Filter 官方文档读后总结
2012-02-03 17:46 2295Intent 和 Intent Filter 1 ... -
【Android】Intent 和 Intent Filter
2012-02-03 17:42 1492转自:http://www.cnblogs.com/Andro ... -
【Android】常量DEFAULT_KEYS_SHORTCUT 功能的验证 及其 源码实现分析
2012-02-03 17:15 2426转自:http://blog.csdn.net/silence ... -
【Android】Android 手机杀进程并不省电,效果只能适得其反
2011-11-29 11:21 4943大家可能是被windows毒 ... -
【Android】BroadCastReceiver 简介
2011-11-24 10:50 3774BroadCastReceiver 简介 Bro ... -
【Android】四大组件之Service(服务)
2011-11-24 10:49 2256Service是Andorid系统提供的四大组件之一,它 ... -
【Android】BroadcastReceiver发送intent给service或者activity
2011-11-24 10:46 7004BroadcastReceiver:对象的生命周期不超过5s, ... -
【Android】理解Service和BroadcastReceiver(转载)
2011-11-24 10:45 2441Service与Activity类似,也需要在Manifest ... -
【Android】监听文件和目录的创建删除移动等事件
2011-11-16 10:36 2769出于安全上的需要,我们经常需要监听sd卡或者其他路径上的 ... -
【Android】如何在Activity中启动另一应用程序的方法,无需得到类名
2011-11-16 10:33 3137在网上搜索了一会相关的实现代码,发现所有的文章都说是需要 ... -
【Android】loadData与loadDataWithBaseURL的区别
2011-11-10 13:54 34193在写WebView时,感觉LoadUrl太浪费流量,而且 ... -
【Android】检测手机摇晃
2011-11-10 11:10 4461做游戏的时候,一般都要使用到多种多样的传感器,以实现比较丰 ...
相关推荐
注册BroadcastReceiver有两种方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中声明,这样系统在启动时就会自动创建BroadcastReceiver对象。动态注册则是在运行时通过代码完成,需要在适当的时候...
BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,这样系统在应用程序启动时就会创建并初始化该Receiver,即使应用不在运行状态也能接收...
本篇文章将深入探讨如何创建和使用一个`Android BroadcastReceiver`实例,特别是关注有序广播的发送。 首先,让我们理解什么是BroadcastReceiver。BroadcastReceiver是Android四大组件之一,它可以监听并响应系统...
BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml中声明BroadcastReceiver,应用启动时就会自动初始化。 2. 动态注册:在代码中创建BroadcastReceiver实例并注册,应用...
BroadcastReceiver通常有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,这种方式的Receiver在应用启动时就会自动激活,即使应用被关闭,依然可以接收到指定...
BroadcastReceiverDemo是针对这一核心功能的一个实例项目,通过它我们可以深入理解BroadcastReceiver的工作原理和使用方法。 BroadcastReceiver主要分为两种类型:显式和隐式。显式BroadcastReceiver需要在...
BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml中声明BroadcastReceiver,这样系统在应用启动时就会自动创建实例。优点是即使应用被关闭,仍能接收到广播,但缺点是...
BroadcastReceiver有两种主要的注册方式:静态注册和动态注册。 1. 静态注册: 静态注册通常在AndroidManifest.xml文件中完成。这种方式的BroadcastReceiver在应用安装后就会被系统加载,即使应用没有运行,也能...
BroadcastReceiver的注册方式主要有两种:静态注册和动态注册。 1. 静态注册: 静态注册是在AndroidManifest.xml文件中通过标签来声明BroadcastReceiver的。这种方式的注册使得BroadcastReceiver在应用启动时就会...
BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,应用启动时系统会自动创建BroadcastReceiver实例。这种注册方式使得BroadcastReceiver...
BroadcastReceiver可以通过静态注册和动态注册两种方式实现。静态注册在AndroidManifest.xml中进行,应用启动时即生效;动态注册在代码中完成,需在需要时注册,不再需要时解除注册,这样可以提高应用性能。 以下是...
BroadcastReceiver分为两种类型:静态注册和动态注册。 1. 静态注册: 静态注册通常在AndroidManifest.xml文件中完成。这样注册的BroadcastReceiver是常驻型的,即使应用程序被关闭,只要系统广播与之匹配,...
首先,BroadcastReceiver有两种注册方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中声明,如示例中的 `<receiver>` 标签,这样BroadcastReceiver在应用启动时就会被创建。动态注册则是在代码运行...
BroadcastReceiver有两种注册方式:静态注册(在AndroidManifest.xml中声明)和动态注册(在代码中实例化并注册)。静态注册的Receiver会在系统启动时自动激活,而动态注册则需要在运行时手动激活,但动态注册的...
BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. **静态注册**:在AndroidManifest.xml文件中声明BroadcastReceiver。这种方式下的Receiver会在应用安装时被系统注册,无需手动启动,只要设备接收到匹配...
首先,BroadcastReceiver的注册有两种方式:静态注册和动态注册。静态注册通常在AndroidManifest.xml文件中进行,这样即使应用不在运行,也能接收到广播。动态注册则在代码中完成,通常在需要时注册,不需要时注销,...
在这个“broadcast_Android 广播机制broadcast用法实例.rar”压缩包中,我们很可能会找到关于如何使用BroadcastReceiver的示例代码和教程。 首先,广播分为两种类型:显式广播和隐式广播。显式广播是直接指定接收者...
BroadcastReceiver分为静态注册和动态注册两种方式。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,启动时系统会自动创建Receiver实例,即使应用不在后台运行也能接收到广播。这种方式简单便捷...
首先,BroadcastReceiver的注册有两种方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中声明receiver元素,这样系统在启动时就会自动创建广播接收者实例。动态注册则是在代码中使用Context的...