Braodcast Receiver顾名思义就是广播接收器,它和时间处理机制类似,但是事件处理机制是程序组件级别的(比如:按钮的单击事件),而广播事件处理机制是系统级别的。我们可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。我们同样可以在自己的应用程序中实现Broadcast Receiver来监听和响应广播的Intent。
事件的广播通过创建Intent对象并调用sendBroadcast()方法将广播发出。事件的接受是通过定义一个继承BroadcastReceiver的类来实现的,继承该类后覆盖其onReceive()方法,在该方法中响应时间。
下面是android系统中定义了很多标准的Broadcast Action来响应系统的广播事件。
①ACTION_TIME_CHANGED(时间改变时触发)
②ACTION_BOOT_COMPLETED(系统启动完成后触发)--比如有些程序开机后启动就是用这种方式来实现的
③ACTION_PACKAGE_ADDED(添加包时触发)
④ACTION_BATTERY_CHANGED(电量低时触发)
详细:标准广播ACTION常量
常量名称 |
常量值 |
意义 |
ACTION_BOOT_COMPLETED |
android.intent.action.BOOT_COMPLETED |
系统启动完成 |
ACTION_TIME_CHANGED |
android.intent.action.ACTION_TIME_CHANGED |
时间改变 |
ACITON_DATE_CHANGED |
android.intent.action.ACTION_DATE_CHANGED |
日期改变 |
ACTION_TIMEZONE_CHANGED |
android.intent.action.ACTION_TIMEZONE_CHANGED |
时区该表 |
ACTION_BATTERY_LOW |
android.intent.action.ACTION_BATTERY_LOW |
电量低 |
ACTION_MEDIA_EJECT |
android.intent.action.ACTION_MEDIA_EJECT |
插入或拔出外部媒体 |
ACTION_MEDIA_BUTTON |
android.intent.action.ACTION_MEDIA_BUTTON |
按下媒体按钮 |
ACTION_PACKAGE_ADDED |
android.intent.action.ACTION_PACKAGE_ADDED |
添加包 |
ACTION_PACKAGE_REMOVED |
android.intent.action.ACTION_PACKAGE_REMOVED |
删除包 |
在这里,要练习3个内容
①自定义Broadcast Receiver
②Notification和NotificationManager的使用
③AlarmManager的使用
1、首先看一个自定义的广播事件的例子
- package org.hualang.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 BroadCastTest extends Activity {
- /** Called when the activity is first created. */
- private static final String MY_ACTION="org.hualang.broadcast.action.MY_ACTION";
- private Button btn;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn=(Button)findViewById(R.id.button);
- btn.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View arg0) {
- // TODO Auto-generated method stub
- Intent intent=new Intent();
- intent.setAction(MY_ACTION);
- intent.putExtra("msg", "同志们好!同志们辛苦啦!");
- sendBroadcast(intent);
- }
- });
- }
- }
MyReceiver.java
- package org.hualang.broadcast;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.Toast;
- public class MyReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context arg0, Intent arg1) {
- // TODO Auto-generated method stub
- String msg=arg1.getStringExtra("msg");
- Toast.makeText(arg0, msg, Toast.LENGTH_LONG).show();
- }
- }
注意:在AndroidManifest.xml文件中注册
- <receiver android:name="MyReceiver">
- <intent-filter>
- <action android:name="org.hualang.broadcast.action.MY_ACTION"/>
- </intent-filter>
- </receiver>
我们还可以在AndroidManifest.xml文件中注销一个广播接收器,一般在Activity.onResume()方法中使用Context.registerReceiver()方法来注册一个广播接收器,在Activity.onPause()中使用unregisterReceiver(r)方法注销一个广播接收器,例如:
//实例化intent过滤器
IntentFilter filter = new IntentFilte();
//实例化Receiver
MyReceiver r = new Receiver();
//注册Receiver
registerReceiver(r,filter);
为了注销一个BroadcastReceiver,应使用Context.unregisterReceiver方法,传入一个BroadcastReceiver实例
//注销
unregisterReceiver(r);
2、下面的是Notification的例子,比如手机来短信的时候,会在屏幕最上边有一个通知,那个就是Notification
DisplayActivity.java
- package org.hualang.notify;
- import android.app.Activity;
- import android.app.Notification;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class DisplayActivity extends Activity {
- private Button cancelbtn;
- private Notification n;
- private NotificationManager nm;
- private static final int ID=1;
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main2);
- cancelbtn = (Button)findViewById(R.id.button2);
- String service = NOTIFICATION_SERVICE;
- nm = (NotificationManager)getSystemService(service);
- n = new Notification();
- int icon = n.icon =R.drawable.icon;
- String tickerText = "喜欢HTC的样子,喜欢defy的配置";
- long when = System.currentTimeMillis();
- n.icon = icon;
- n.tickerText = tickerText;
- n.when = when;
- Intent intent = new Intent(this,NotifyTest2.class);
- PendingIntent pi = PendingIntent.getActivity(this, 0 , intent , 0);
- n.setLatestEventInfo(this, "My Title", "My Content", pi);
- nm.notify(ID, n);
- cancelbtn.setOnClickListener(cancelListener);
- }
- private OnClickListener cancelListener=new OnClickListener()
- {
- public void onClick(View v)
- {
- nm.cancel(ID);
- }
- };
- }
MyReceiver.java
- package org.hualang.notify;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- public class MyReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent i=new Intent();
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- i.setClass(context,DisplayActivity.class);
- context.startActivity(i);
- }
- }
NotifyTest2.java
- package org.hualang.notify;
- 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 NotifyTest2 extends Activity {
- /** Called when the activity is first created. */
- private Button btn;
- private static final String MY_ACTION="org.hualang.notify.aciton.MY_ACITON";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn=(Button)findViewById(R.id.button);
- btn.setOnClickListener(listener);
- }
- private OnClickListener listener=new OnClickListener()
- {
- public void onClick(View v)
- {
- Intent intent=new Intent();
- intent.setAction(MY_ACTION);
- sendBroadcast(intent);
- }
- };
- }
注册AndroidManifest.xml
- <receiver android:name="MyReceiver">
- <intent-filter>
- <action android:name="org.hualang.notify.aciton.MY_ACITON"/>
- </intent-filter>
- </receiver>
- <activity android:name="DisplayActivity">
- </activity>
运行结果如下:
3、下面是AlarmManager的例子,它是一个闹钟,感兴趣的朋友可以自己写一个小闹钟
AlarmManager常用的属性和方法
属性或方法名称 |
说明 |
ELAPSED_REALTIME |
设置闹钟时间,从系统启动开始 |
ELAPSED_REALTIME_WAKEUP |
设置闹钟时间,从系统启动开始,如火设备休眠则唤醒 |
INTERVAL_DAY |
设置闹钟时间,间隔一天 |
INTERVAL_FIFTEEN_MINUTES |
间隔15分钟 |
INTERVAL_HALF_DAY |
间隔半天 |
INTERVAL_HALF_HOUR |
间隔半小时 |
INTERVAL_HOUR |
间隔1小时 |
RTC |
设置闹钟时间,从系统当前时间开始(System.currentTimeMillis()) |
RTC_WAKEUP |
设置闹钟时间,从系统当前时间开始,设备休眠则唤醒 |
set(int type,long tiggerAtTime,PendingIntent operation) |
设置在某个时间执行闹钟 |
setRepeating(int type,long triggerAtTiem,long interval,PendingIntent operation) |
设置在某个时间重复执行闹钟 |
setInexactRepeating(int type,long triggerAtTiem,long interval,PendingIntent operation) |
是指在某个时间重复执行闹钟,但不是间隔固定时间 |
AlarmTest.java
- package org.hualang.alarm;
- import android.app.Activity;
- import android.app.AlarmManager;
- import android.app.PendingIntent;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class AlarmTest extends Activity {
- /** Called when the activity is first created. */
- private Button btn1,btn2;
- private static final String BC_ACTION="org.hualang.alarm.action.BC_ACTION";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn1 = (Button)findViewById(R.id.button1);
- btn2 = (Button)findViewById(R.id.button2);
- final AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
- Intent intent = new Intent();
- intent.setAction(BC_ACTION);
- intent.putExtra("msg", "你该起床了");
- final PendingIntent pi = PendingIntent.getBroadcast(AlarmTest.this, 0, intent, 0);
- final long time = System.currentTimeMillis();
- btn1.setOnClickListener(new OnClickListener()
- {
- public void onClick(View v)
- {
- am.setRepeating(AlarmManager.RTC_WAKEUP, time, 5*1000, pi);
- }
- });
- btn2.setOnClickListener(new OnClickListener()
- {
- public void onClick(View v)
- {
- am.cancel(pi);
- }
- });
- }
- }
MyReceiver.java
- package org.hualang.alarm;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- import android.widget.Toast;
- public class MyReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- String msg=intent.getStringExtra("msg");
- Log.v("SERVICE","QIAN----------------------");
- Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
- Log.v("SERVICE", "HOU-----------------------");
- }
- }
注册AndroidManifest.xml
- <receiver android:name="MyReceiver">
- <intent-filter>
- <action android:name="org.hualang.alarm.action.BC_ACTION"/>
- </intent-filter>
- </receiver>
运行结果:
点击设置闹钟后,会每隔5秒弹出一个Toast,点击取消闹钟就不会弹出了
来自:http://hualang.iteye.com/blog/1003374
相关推荐
在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或自定义广播事件。在“20.1 广播接收器案例”中,我们将深入探讨如何创建、注册和使用广播接收器,以及在实际...
广播接收器在Android系统中扮演着重要的角色,它是Android四大组件之一,用于监听并响应系统或应用程序发布的广播事件。在Android应用开发中,广播接收器可以让我们的应用在后台运行时仍然能够接收到某些特定事件的...
BroadcastReceiver是Android系统中的一个监听器,它可以在后台运行,监听特定的Intent广播。当广播发送时,BroadcastReceiver会接收到相应的Intent并执行相应操作。这使得BroadcastReceiver成为在不同组件间通信的...
在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或自定义广播事件。在Android应用开发中,广播接收器分为静态注册和动态注册两种方式。本文主要聚焦于动态注册...
广播接收器可能会导致内存泄漏,如果广播接收器在 Activity 生命周期结束后没有被卸载,可能会导致内存泄漏。 第五种可能:Handler Handler 是 Android 中的一个组件,用于处理消息队列。如果 Handler 在 Activity...
广播接收器(BroadcastReceiver)是Android四大组件之一,它可以在不运行的情况下接收并处理系统或应用广播事件。这里我们将深入探讨自定义广播、有序广播以及如何创建和使用广播接收器。 **自定义广播** 自定义...
BroadcastReceiver,中文名为广播接收器,是Android系统中四大组件之一,用于接收系统或应用程序发布的广播事件。在Android系统中,任何组件或者服务都可以发送广播,而BroadcastReceiver则可以监听并响应这些广播,...
在Android开发中,四大组件是Activity、Service、Content Provider以及我们这里关注的Broadcast Receiver(广播接收器)。Broadcast Receiver是Android系统中的一个重要组成部分,它允许应用程序在后台接收并响应...
在Android系统中,广播接收器(Broadcast Receiver)是一种非常重要的组件,它允许应用程序对系统或应用级别的事件作出响应。在给定的标题“开机自启demo(静态注册广播接收器)”中,我们关注的核心是静态注册的...
在Android系统中,广播接收器(Broadcast Receiver)是四大组件之一,它负责监听并响应系统或应用程序发布的广播意图(Intent)。本资源提供的“android 广播接收完整源码”应该包含了一个实现广播接收功能的完整...
在Android开发中,广播接收者(BroadcastReceiver)是Android四大组件之一,它是系统用来传递全局消息的一种机制。当你创建一个BroadcastReceiver,你可以监听系统或应用发送的广播,并在接收到广播时执行相应的处理...
在Android系统中,广播接收器(BroadcastReceiver)是一种非常重要的组件,它允许应用程序在接收到系统或应用广播消息时执行相应的操作。这个案例主要探讨如何创建、注册和使用BroadcastReceiver来处理Android系统的...
在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或应用程序发送的各种广播意图(Intent)。广播是Android系统中的一种全局通知机制,用于在不同的应用之间传递...
在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或应用程序广播事件。"android简化广播接受器"这个主题旨在探讨如何通过优化和简化代码来更有效地处理广播接收器...
BroadcastReceiver(广播接收器)是处理这些广播的核心类。下面将详细介绍Broadcast的使用,包括静态和动态注册,以及接受系统广播和自定义本地广播。 1. **静态注册广播**: 静态注册通常在AndroidManifest.xml...
在掌握了基本的开发技能后,开发者可以进一步深入学习Android框架,了解其内部工作原理,包括Activity生命周期管理、Service后台服务、Broadcast Receiver广播接收器、Content Provider内容提供者等核心组件。...
在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或应用程序广播事件。广播在Android中是全局的,任何应用都可以发送广播,其他应用可以通过注册广播接收器来监听...
- **接收广播**:广播接收器接收到广播后会调用`onReceive()`方法进行响应处理。 #### 三、广播接收器的定义与使用 ##### 1. 定义广播接收器 定义广播接收器需要继承`BroadcastReceiver`类,并重写`onReceive()`...
- Broadcast Receiver广播接收器:学习如何发送和接收Broadcast消息。 - Content Provider内容提供者:掌握Content Provider的使用方法,实现跨应用的数据共享。 8. **性能优化**: - 应用调试工具:熟悉使用ADB...
本篇文章将深入探讨如何在Android中实现跨应用程序广播的发送与接收,并展示如何在广播接收器中弹出对话框。 首先,我们来看如何发送广播。在Android中,你可以使用`sendBroadcast()`方法来发送一个广播意图...