当前位置:操作系统 > 安卓/Android >>

BroadCast广播机制应用与实例

如何编写广播接收器
第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法. 
[java]
class MyBroadcastReceiver extends BroadcastReceiver {  
     //接收到广播会被自动调用    
    @Override  
    public void onReceive (Context context, Intent intent) {  
        //从Intent中获取action  
        …your code here…  
    }  
}  
第二步:定义好广播接收器还不行,必须向系统注册以便让其知道该接收器可以处理哪些广播事件。
常见方式是采用静态注册,修改MENIFEST.xml文件, 在<application></application>中加入receiver标签.
[html] 
<application>  
    <activity name=""/>  
    <receiver android:name=".MyBroadcastReceiver">  
        <!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->   
        <intent-filter>  
            <action android:name="com.app.bc.test"/>  
        </intent-filter>  
    </receiver>  
</application>  
第三步:此时我们可以发送一个广播事件出去,代码如下:
[java]
Intent intent = new Intent(“com.app.bc.test”);  
sendBroadcast(intent);//发送广播事件  
 
动态注册广播接收器
在某个Activity中,我们可以用代码来实现动态注册:
[java] 
//生成一个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]
SMSReceiver  smsReceiver = new SMSReceiver();  
IntentFilter filter = new IntentFilter();         
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);  
TestBC1Activity.this.registerReceiver(smsReceiver, filter);   
(无需在配置文件中注册接收器)
应用实例
[java] 
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();  
            }  
        });  
    }  
}  
&nb
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,