`

Android学习之Broadcast

阅读更多

在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver

活动(Activity) - 用于表现功能

服务(Service) - 相当于后台运行的 Activity

广播(Broadcast) - 用于发送广播

广播接收器(BroadcastReceiver) - 用于接收广播

Intent - 用于连接以上各个组件,并在其间传递消息

 

Android中的广播事件有两种,一种就是系统广播事件,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。
另外一种是我们自定义的广播事件

 

 

注册BroadcastReceiver有两种方式:

一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。

另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,如果取消时就调用 Context.unregisterReceiver()方法。
如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)

发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。

另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。
同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。

广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。
通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等

 

MainActivity.java:

 

package com.demo.broadcast;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**  
 * @ClassName: MainActivity  
 * @Description: Broadcast测试demo
 * @author chenzheng
 * @date 2014-9-4 上午10:15:05  
 */
public class MainActivity extends Activity implements OnClickListener{
	private Button sendStaticBtn;
	private Button sendDynamicBtn;
	private static final String STATICACTION = "com.demo.broadcast.static";
	private static final String DYNAMICACTION = "com.demo.broadcast.dynamic";
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sendStaticBtn = (Button) findViewById(R.id.send_static);
		sendDynamicBtn = (Button) findViewById(R.id.send_dynamic);
		sendStaticBtn.setOnClickListener(this);
		sendDynamicBtn.setOnClickListener(this);
	}
	
	@Override
	protected void onStart() {
		super.onStart();
		Log.e("MainActivity", "注册广播事件");
		// 注册自定义动态广播消息
		IntentFilter filter_dynamic = new IntentFilter();
		filter_dynamic.addAction(DYNAMICACTION);
		registerReceiver(dynamicReceiver, filter_dynamic);
	}
	
	private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			Log.e("MainActivity", "接收自定义动态注册广播消息");
			if(intent.getAction().equals(DYNAMICACTION)){
				String msg = intent.getStringExtra("msg");
				Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
			}
		}
	};
	
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.send_static:
			Log.e("MainActivity", "发送自定义静态注册广播消息");
			Intent intent1 = new Intent();
			intent1.setAction(STATICACTION);
			intent1.putExtra("msg", "接收静态注册广播成功!");
			sendBroadcast(intent1);
			break;
		case R.id.send_dynamic:
			Log.e("MainActivity", "发送自定义动态注册广播消息");
			Intent intent2 = new Intent();
			intent2.setAction(DYNAMICACTION);
			intent2.putExtra("msg", "接收动态注册广播成功!");
			sendBroadcast(intent2);
			break;
		default:
			break;
		}
	}
}

 

 

 

 

StaticReceiver.java:

 

 

 

package com.demo.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

/**  
 * @ClassName: StaticReceiver  
 * @Description: 自定义静态注册广播消息接收器
 * @author chenzheng
 * @date 2014-9-4 上午11:09:53  
 */
public class StaticReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.e("MainActivity", "接收自定义动态注册广播消息");
		String msg = intent.getStringExtra("msg");
		Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
	}
}

 

 

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.demo.broadcast"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="14" />

    <application
        android:icon="@drawable/ic_launcher"
        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=".StaticReceiver" >
            <intent-filter>
                <action android:name="com.demo.broadcast.static" />
            </intent-filter>
        </receiver>
        <!-- 注册系统静态广播接收器 -->
        <receiver android:name=".SystemReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_LOW" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="hello" />

    <Button
        android:id="@+id/send_static"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送自定义静态注册广播" />

    <Button
        android:id="@+id/send_dynamic"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送自定义动态注册广播" />

</LinearLayout>

  

分享到:
评论

相关推荐

    Android学习之Broadcast练习_dlc

    本实践项目"Android学习之Broadcast练习_dlc"旨在帮助开发者深入理解和熟练掌握Broadcast的相关知识。 首先,我们要了解Broadcast的基本概念。Broadcast分为系统广播和自定义广播。系统广播是由系统发出的,例如...

    Android学习之Broadcast的简单使用

    Android学习之Broadcast的简单使用 Android学习之Broadcast的简单使用是Android开发中一个非常重要的知识点。Broadcast是Android系统的一种消息机制,允许应用程序之间进行通信和交互。今天,我们将详细介绍如何...

    Android学习-broadcast实现音乐播放器

    在这个“Android学习-broadcast实现音乐播放器”的项目中,我们将探讨如何利用BroadcastReceiver来构建一个简单的音乐播放器。BroadcastReceiver是Android系统中的一个关键组件,它监听并响应系统或应用发布的广播...

    Android中关于Broadcast、Intent 的应用

    在Android系统中,Broadcast(广播)和Intent是两个至关重要的组件,它们构成了应用程序间通信的基础。Broadcast用于在应用程序之间...对于初学者来说,深入学习和实践这两个概念,将为后续的Android开发奠定坚实基础。

    Pro Android学习:Broadcast小例子

    这是Pro Android学习系列中Broadcast部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

    Android利用广播BroadCast监听网络的变化

    1. **BroadcastReceiver**: 它是Android四大组件之一,用于接收系统或自定义广播事件。当特定事件发生时,BroadcastReceiver会触发,并执行相应的逻辑。在这个例子中,我们关注的是网络状态改变的广播。 2. **注册...

    Android UDP broadcast Example

    这样的示例有助于Android开发者学习如何实现在移动设备之间进行实时、无连接的通信。通过实践和理解这些知识点,开发者可以创建出能够利用UDP广播功能的应用,例如局域网内的即时通讯、设备发现等。

    Android应用源码之broadcast_broadcast.zip

    解压“Android应用源码之broadcast_broadcast”后,你可以通过阅读和分析代码来学习BroadcastReceiver的使用方法,了解如何创建、注册、发送广播,以及如何处理接收到的广播。此外,还可以研究如何在服务(Service)...

    broadcast_Android 广播机制broadcast用法实例.rar

    在Android系统中,广播(Broadcast)是一种非常重要的组件,它允许应用程序之间进行异步通信,即使这些应用在后台运行或完全未启动。BroadcastReceiver是处理广播的核心类,它监听并响应系统或应用发送的广播意图...

    Android_UDPBroadcast_Demo

    在这个Android_UDPBroadcast_Demo中,我们将深入探讨如何在Android设备上进行UDP广播的收发。 首先,要实现UDP广播,我们需要使用Java的`java.net.DatagramSocket`类来创建一个UDP套接字。这个套接字可以用于发送和...

    android-broadcast学习

    本学习资料主要围绕“android-broadcast”这一主题,适合初学者入门。以下是对Android广播机制及其应用的详细阐述。 一、BroadcastReceiver基本概念 BroadcastReceiver是一个抽象类,用于接收系统或应用广播事件。...

    Android系统中的广播(Broadcast)机制简要介绍和学习计划

    广播机制在Android中之所以不可或缺,是因为它实现了发送者和接收者的松耦合。发送广播的应用不需要知道哪些应用或组件会接收到广播,而接收广播的组件也不需要预先知道广播的来源。这种设计使得系统能够动态响应...

    Android学习资源网址

    ### Android学习资源与知识点概述 在当今移动互联网时代,Android操作系统作为全球最广泛使用的移动设备平台之一,其重要性不言而喻。对于开发者而言,掌握Android开发技能不仅能够提升个人职业竞争力,还能够为...

    Android应用源码之broadcast.zip

    通过分析这个"Android应用源码之broadcast.zip"中的源码,开发者可以深入理解BroadcastReceiver的工作原理,学习如何在实际项目中有效地使用广播进行组件间的通信。这种能力对于构建健壮、高效的Android应用至关重要...

    Android代码-broadcast电池电量显示源码.zip

    - BroadcastReceiver是Android四大组件之一,用于接收系统或自定义广播事件。 - 它可以动态注册(在代码中注册,活动结束时自动注销)或静态注册(在AndroidManifest.xml中声明,即使应用后台运行也能接收到广播)...

    Android应用源码之broadcast.zip项目安卓应用源码下载

    Android应用源码之broadcast.zip项目安卓应用源码下载Android应用源码之broadcast.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    Android应用源码之broadcast1.zip

    Broadcast1.zip这个压缩包很可能包含了与Android广播接收器相关的源代码示例,帮助开发者理解和学习如何在实际项目中使用广播。 首先,我们要理解Android广播的基本概念。在Android系统中,Broadcast Intent(广播...

    Broadcast demo

    在Android系统中,Broadcast(广播)是一种全局的消息传递机制,它允许应用程序之间进行异步...通过Broadcast Demo项目的学习,开发者能够熟练掌握Android中Broadcast的基本使用,为实现更复杂的跨组件通信打下基础。

    安卓Android源码——broadcast1.rar

    在安卓(Android)系统中,Broadcast(广播)是一种重要的组件,用于在整个系统中发送和接收消息。Broadcast Intent(广播意图)是实现这一功能的核心工具,它允许应用在无需直接交互的情况下进行通信。当我们谈论...

    android BroadCast

    在Android系统中,广播(Broadcast)是一种非常重要的组件,它使得应用程序之间能够进行无接触的信息传递,即使这些应用并未在运行。"android Broadcast"这个标题指的是Android中的广播机制,它是Android系统事件...

Global site tag (gtag.js) - Google Analytics