【Android】BroadCast广播机制应用与实例
2014-03-11 11:34
267 查看
如何编写广播接收器
第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法.[java] view
plaincopy
class MyBroadcastReceiver extends BroadcastReceiver {
//接收到广播会被自动调用
@Override
public void onReceive (Context context, Intent intent) {
//从Intent中获取action
…your code here…
}
}
第二步:定义好广播接收器还不行,必须向系统注册以便让其知道该接收器可以处理哪些广播事件。
常见方式是采用静态注册,修改MENIFEST.xml文件, 在<application></application>中加入receiver标签.
[html] view
plaincopy
<application>
<activity name=""/>
<receiver android:name=".MyBroadcastReceiver">
<!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->
<intent-filter>
<action android:name="com.app.bc.test"/>
</intent-filter>
</receiver>
</application>
第三步:此时我们可以发送一个广播事件出去,代码如下:
[java] view
plaincopy
Intent intent = new Intent(“com.app.bc.test”);
sendBroadcast(intent);//发送广播事件
动态注册广播接收器
在某个Activity中,我们可以用代码来实现动态注册:[java] view
plaincopy
//生成一个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向系统发送对其感兴趣的广播接收器中.
动态注册的步骤:
[java] viewplaincopy
SMSReceiver smsReceiver = new SMSReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);
TestBC1Activity.this.registerReceiver(smsReceiver, filter);
(无需在配置文件中注册接收器)
应用实例
[java] viewplaincopy
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();
}
});
}
}
广播类
[java] view
plaincopy
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
[html] view
plaincopy
<receiver android:name=".BroadCastTest1">
<intent-filter android:priority="3">
<action android:name="bc.test101"/>
</intent-filter>
</receiver>
布局文件
[html] view
plaincopy
<?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广播机制应用与实例
- 【Android】BroadCast广播机制应用与实例
- 【Android】BroadCast广播机制应用与实例
- BroadCast广播机制应用与实例
- BroadCast广播机制应用与实例
- Android应用内广播LocalBroadcastManager机制详解
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android应用实例之----基于BroadCastReceiver的SD卡装载卸载实例!
- android中的广播退出机制broadcast
- Android广播事件机制及应用
- Android之BroadcastReceiver讲义并通过广播机制实现短信窃听
- Android深入浅出系列之实例应用—开机就运行自定义的程序BroadcastReceiver和intent-filter的用法
- Android系统中的广播(Broadcast)机制注册注销发送原理总结
- Android应用中通过AIDL机制实现进程间的通讯实例
- Android开发学习总结(1.21-广播机制Broadcast)
- android学习14#--Handler消息传递机制实例应用
- Android的Handler Looper Message机制应用实例与详解(二) 推荐
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- Android应用实例之----基于BroadCastReceiver的SD卡装载卸载实例!