`

玩转Android---组件篇---Broadcast Receiver(广播接收器)

阅读更多

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,点击取消闹钟就不会弹出了



 

  • 大小: 13.3 KB
  • 大小: 8.4 KB
  • 大小: 8.5 KB
  • 大小: 10.4 KB
  • 大小: 14.4 KB
分享到:
评论
1 楼 Butterfly_ 2013-08-13  
   op   s:  
   

相关推荐

    android-lib-broadcast-receiver:一个用于广播接收器的android库

    一个简单的Android广播接收器库。 介绍 该库旨在使用“观察者”设计模式处理所有广播接收器操作,以保持更新所有广播侦听器。 例如,通过使用此库,无论您在应用程序中的哪个位置,都可以跟踪应用程序网络状态。 只...

    android--broadcast实例

    BroadcastReceiver(广播接收器)是接收广播的关键类,让我们深入探讨一下Broadcast实例在Android开发中的应用及其相关知识点。 首先,BroadcastReceiver的工作原理是基于Intent的发布和订阅模式。当一个广播意图被...

    android-sdk_r24.4.1-windows.zip

    此外,理解Android的组件模型,如活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider),是构建功能完整应用的基础。 总之,"android-sdk_r24.4.1-windows.zip...

    android-simple-broadcast-receiver-app:简单的Android Broadcast Receiver使用示例

    在Android开发中,Broadcast Receiver(广播接收者)是四大组件之一,它负责监听系统或应用程序发送的广播消息,并在接收到这些消息时执行相应的操作。本项目“android-simple-broadcast-receiver-app”提供了一个...

    Android自学笔记-17-广播接收者(BroadcastReceiver)

    在Android开发中,广播接收者(BroadcastReceiver)是Android四大组件之一,它是系统用来传递全局消息的一种机制。当你创建一个BroadcastReceiver,你可以监听系统或应用发送的广播,并在接收到广播时执行相应的处理...

    第八章_Android广播事件处理Broadcast_Receiver

    在Android应用开发过程中,Broadcast Receiver是一种重要的组件,它主要用于接收来自系统或其他应用程序发送的广播消息。通过这种方式,应用可以了解到外部环境的变化,比如网络状态改变、电量变化等,并据此作出...

    Android Broadcast 广播机制 实例

    当一个Broadcast被发送时,所有注册了与该Broadcast匹配的BroadcastReceiver(广播接收器)都会收到这个消息,并可以执行相应的处理操作。这种机制使得不同应用程序之间可以相互协作,例如,当手机接收到短信时,...

    android-broadcast学习

    在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它负责监听并响应系统或应用程序发布的广播意图(Intent)。本学习资料主要围绕“android-broadcast”这一主题,适合初学者入门。以下是对Android...

    基于Android的广播接收器的设计与应用.pdf

    广播接收器是Android四大组件之一,在Android系统中内置了很多系统级别的广播。 一、广播接收器的概念 广播接收器(BroadcastReceiver)是一种用来过滤、接收并响应广播的组件,通过广播接收器可以监听系统中的广播...

    cineio-broadcast-android, cine.io Android广播 SDK.zip

    cineio-broadcast-android, cine.io Android广播 SDK cine.io sdk 用于 cine.io 广播的android库 。这个库在 Android 5.0 + ( Lollipop ) 上不稳定。 对由此带来的任何不便,我们深表歉意. 在我们做之前,我们喜欢...

    Android广播组件

    - **接收广播**:广播接收器接收到广播后会调用`onReceive()`方法进行响应处理。 #### 三、广播接收器的定义与使用 ##### 1. 定义广播接收器 定义广播接收器需要继承`BroadcastReceiver`类,并重写`onReceive()`...

    Android-广播的发送与接收demo

    在Android开发中,广播(Broadcast)是一种非常重要的组件,它允许应用程序之间进行异步通信,无需直接耦合。本文将详细讲解如何实现一个简单的Android广播发送与接收的Demo,包括如何创建并发送广播、如何注册并...

    Android程序源码--广播

    2. 广播接收器(BroadcastReceiver):负责接收广播Intent的组件,当接收到匹配的广播时,它的onReceive()方法会被调用。广播接收器可以静态注册(在AndroidManifest.xml中声明)或动态注册(在代码中实现)。 二、...

    安卓四大组件之一-------Broadcast

    在Android系统中,四大组件是应用程序的核心组成部分,包括Activity、Service、Content Provider和Broadcast Receiver(广播接收者)。本文将深入探讨Broadcast(广播)这一组件,它是Android系统中用于应用程序间...

    android 广播接收完整源码

    在Android系统中,广播接收器(Broadcast Receiver)是四大组件之一,它负责监听并响应系统或应用程序发布的广播意图(Intent)。本资源提供的“android 广播接收完整源码”应该包含了一个实现广播接收功能的完整...

    android-关于广播机制的使用

    在Android系统中,广播(Broadcast)是一种非常重要的组件,它使得应用程序之间能够进行无须先建立连接的通信。广播机制是Android系统事件分发的重要方式,允许应用在接收到特定事件时执行相应的操作。本篇将详细...

    android中广播接收

    在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序监听并响应系统或应用程序发送的各种广播意图(Intent)。广播是Android系统中的一种全局通知机制,用于在不同的应用之间传递...

    MyFirstRep-Broadcast-Receiver-with-Vibrate-Alert-

    标题中的"MyFirstRep-Broadcast-Receiver-with-Vibrate-Alert-"表明这是一个关于Android平台上的广播接收器(Broadcast Receiver)实现项目,特别的是,它包含了振动警报功能。在Android开发中,广播接收器是一种...

    android-sdk-sources-android-19.rar

    2. **框架层**:这是Android系统的核心部分,包括各种服务和组件,如Activity Manager、Content Provider、Broadcast Receiver等。Android 19引入了对全屏模式的支持,使得应用能更好地适应无按钮的设备。源码中可以...

    利用广播Broadcast Receiver,在2个不同的Activity传递数据

    在Android应用开发中,BroadcastReceiver是一种非常重要的组件,它允许应用程序在不直接交互的情况下接收和响应系统或自定义广播事件。本教程将深入探讨如何利用BroadcastReceiver在两个不同的Activity之间传递数据...

Global site tag (gtag.js) - Google Analytics