【Android】BroadCast广播机制应用与实例
如何编写广播接收器
第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法.
class MyBroadcastReceiver extends BroadcastReceiver {
//接收到广播会被自动调用
@Override
public void onReceive (Context context, Intent intent) {
//从Intent中获取action
…your code here…
}
}
第二步:定义好广播接收器还不行,必须向系统注册以便让其知道该接收器可以处理哪些广播事件。
常见方式是采用静态注册,修改MENIFEST.xml文件, 在<application></application>中加入receiver标签.
<application>
<activity name=""/>
<receiver android:name=".MyBroadcastReceiver">
<!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->
<intent-filter>
<action android:name="com.app.bc.test"/>
</intent-filter>
</receiver>
</application>
第三步:此时我们可以发送一个广播事件出去,代码如下:
Intent intent = new Intent(“com.app.bc.test”);
sendBroadcast(intent);//发送广播事件
动态注册广播接收器
在某个Activity中,我们可以用代码来实现动态注册:
//生成一个BroadcastReceiver对象
SMSReceiver smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);
//将BroadcastReceiver对象注册到系统当中
//此处表示该接收器会处理短信事件
TestBC1Activity.this.registerReceiver(smsReceiver, filter);
静态注册和动态注册的区别
1)静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。
2)动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。
操作小结
静态注册的步骤:
定义广播接收器,继承BroadcastReceiver类,覆写onReceive函数.
在xml文件中注册监听器,定义Intent-Filter中感兴趣的action操作.
使用sendBroadCast向系统发送对其感兴趣的广播接收器中.
动态注册的步骤:
SMSReceiver smsReceiver = new SMSReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);
TestBC1Activity.this.registerReceiver(smsReceiver, filter);
(无需在配置文件中注册接收器)
应用实例
package com.app.test02; 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; public class BroadCastActivity1 extends Activity{
Intent intent = new Intent();
BroadCastTest1 bCastTest1 = new BroadCastTest1();
// BroadCastTest11 bCastTest11 = new BroadCastTest11();
// BroadCastTest111 bCastTest111 = new BroadCastTest111();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState); setContentView(R.layout.activity_bc1);
//静态注册
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
intent.setAction("bc.test101");
intent.putExtra("name", "静态的");
sendBroadcast(intent);
// sendOrderedBroadcast(intent, null);
}
});
//动态注册
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("bc.test102"); BroadCastActivity1.this.registerReceiver(bCastTest1, intentFilter); intent.setAction("bc.test102");
intent.putExtra("name", "动态的");
sendBroadcast(intent);
// sendOrderedBroadcast(intent, null);
}
}); findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
unregisterReceiver(bCastTest1);
finish();
}
});
}
}
广播类
package com.app.test02; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class BroadCastTest1 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String name = intent.getStringExtra("name"); Toast.makeText(context, "广播1:" + name, 1000).show();
System.out.println(1);
}
}
AndroidManifest.xml
<receiver android:name=".BroadCastTest1">
<intent-filter android:priority="3">
<action android:name="bc.test101"/>
</intent-filter>
</receiver>
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#fff"
android:padding="10dp"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal" > <Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="静态注册广播" /> <Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="动态注册广播" /> <Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="退出" /> </LinearLayout> </LinearLayout>
【Android】BroadCast广播机制应用与实例的更多相关文章
- BroadCast广播机制应用与实例
如何编写广播接收器 第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法. class MyBroadcastReceiver extends Broadcast ...
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...
- 安卓开发笔记——Broadcast广播机制(实现自定义小闹钟)
什么是广播机制? 简单点来说,是一种广泛运用在程序之间的传输信息的一种方式.比如,手机电量不足10%,此时系统会发出一个通知,这就是运用到了广播机制. 广播机制的三要素: Android广播机制包含三 ...
- Android学习--广播机制
广播机制简介 Android的广播可以分为两种类型的,标准广播和有序的广播: 标准广播: 是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播. 有序广播: 是一 ...
- android Broadcast广播消息代码实现
我用的是Fragment , 发送写在一个类中,接收写在另外一个类的内部类中.代码动态实现注册. 代码: myReceiver = new zcd.netanything.MyCar.myReceiv ...
- 九、Android学习第八天——广播机制与WIFI网络操作(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 九.Android学习第八天——广播机制与WIFI网络操作 今天熟悉了An ...
- 品茗论道说广播(Broadcast内部机制讲解)(下)
下面我们来看,递送广播动作中最重要的processNextBroadcast(). 3.2 最重要的processNextBroadcast() 从processNextBroadcast()的代码, ...
- Android学习笔记(广播机制)
1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...
- Android之 广播
(以下内容是阅读郭霖大神的<第一行代码>后自己总结的) 1.概述 广播是Android的四大组件之一. Android的广播机制十分灵活. 2.发送广播 如上图Android的广播主要分为 ...
随机推荐
- c/c++ 重载 数组 操作符[] operator[ is ambiguous, as 0 also mean a null pointer of const char* type.
// Note: //int x = a[0].GetInt(); // Error: operator[ is ambiguous, as 0 also mean a null pointer of ...
- Delphi捕捉DLL执行所抛出的异常。
先来说一下我如何写我的Dll文件的. 先看代码: 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://w ...
- AS 学习笔记 加载数据
AS2 加载本地(外部)数据.swf .png .jpg 等资源使用loadMovie() 加载库里面的mc 用 attachMovie AS3 加载本地(外部)数据 用 Loader 类来完成这个操 ...
- poj2749
万变不离其宗 只要搞清楚题目的基本模型 搞清楚边是一种推导出的关系 搞清楚里面的逻辑关系 那就没什么难的了…… 二分+sat,没什么好说的 ; type node=record point,next: ...
- Linux Kernel KVM 'apic_get_tmcct()'函数拒绝服务漏洞
漏洞版本: Linux Kernel 漏洞描述: Bugtraq ID:64270 CVE ID:CVE-2013-6367 Linux Kernel是一款开源的操作系统. Linux KVM LAP ...
- 【转】Android 4.3源码的下载和编译环境的安装及编译
原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html 告诉windows用户一个不好的消息,windows环境下没法 ...
- JavaScript里的类和继承
JavaScript与大部分客户端语言有几点明显的不同: JS是 动态解释性语言,没有编译过程,它在程序运行过程中被逐行解释执行JS是 弱类型语言,它的变量没有严格类型限制JS是面向对象语言,但 没有 ...
- [OpenSource]浅谈.Net和Java互相调用的三种方式
在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份额,不管谁对谁错,Java和.Net是目前应用开发的两个 ...
- GPIO
一.什么是GPIO? 首先应该理解什么是GPIO.GPIO,英文全称为General-Purpose IO ports,也就是通用IO口.在嵌入式系统中常常有数量众多,但是结构却比较简单的 ...
- OpenGL三维镂垫
2015-12-12帮舍友尝试这个代码的时候发现舍友的会出现No GLSL support 后来发现舍友的版本2.0.2.1才能用 舍友的是glutInitContextVersion(3, 1);改 ...