alexking

学习笔记

导航

浅谈BroadcastReceiver的用法

 最近看了下关于广播方面的东西,加深了理解,也纠正了自己以前的不正确的看法。

  关于广播有2中注册方式,一种是在代码中注册,也叫动态注册,另一种是在AndroidManifest里面注册,也叫静态注册。

  不管在哪个里面注册,都需要发送广播sendBroadcast()。广播发送的是一个Intent,intent里面一般是action。

  如果是在代码里面注册,一般在onResume()方法里面注册。

 

@Override  
protected void onResume() {
// TODO Auto-generated method stub

myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
//向过滤器中添加action
filter.addAction("com.android.shang");
//注册广播
registerReceiver(myReceiver, filter);

Intent intent = new Intent();
intent.setAction("com.android.xiang");
//发送广播
sendBroadcast(intent);
super.onResume();
}

 

在onPause()方法里面要取消注册。

@Override  
protected void onPause() {
// TODO Auto-generated method stub
unregisterReceiver(myReceiver);
super.onPause();
}

 

当然,也可以在xml文件中注册:

<receiver  
android:name=".MyBrocastReceiverTest">
<intent-filter>
<action android:name="com.android.xiang"></action>
</intent-filter>
</receiver>

 

如果发送的广播的action已经注册了,那么在onReceive()方法中就会接收到发过来的广播,继而做出一些处理。

  你可以写出一个内部类:

class MyReceiver extends BroadcastReceiver {  

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//从这里的log中可以看到是否接受到了广播
System.out.println("intent = " + intent);
}

}

 

当然也可以单独写一个类:

package com.android.TestBrocastReceiver;  

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBrocastReceiverTest extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("intent = " + intent);
}

}

 

一般如果在代码里面注册,就把广播写在代码里面,在xml文件中注册就单独写一个类。

  注册在代码里面:

package com.android.TestBrocastReceiver;  

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class TestBrocastReceiver extends Activity {

MyReceiver myReceiver;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
unregisterReceiver(myReceiver);
super.onPause();
}

@Override
protected void onResume() {
// TODO Auto-generated method stub

myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
//向过滤器中添加action
filter.addAction("com.android.shang");
//注册广播
registerReceiver(myReceiver, filter);

Intent intent = new Intent();
intent.setAction("com.android.xiang");
//发送广播
sendBroadcast(intent);
super.onResume();
}

class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//从这里的log中可以看到是否接受到了广播
System.out.println("intent = " + intent);
}
}
}

 

注册在xml文件中:

在xml文件中注册,写上一个广播类,然后在activity中发送广播就可以了。

有时系统会发出一些广播,比如说时间的变化等,时间走一秒就会发一个广播,这时我们可以监听这个广播,然后在接收器中做处理就可以了,而不需要在发广播了。

 

 --------------------------------

娇妻如云 http://www.510h.com

剑道独尊 http://www.95wu.com





posted on 2011-12-22 15:47  alexking  阅读(156)  评论(0编辑  收藏  举报