1:注册broadcastReceiver,有两种方式,一种是在AndroidManifest.xml里面注册,这样的注册在程序没有启动的时候,也会收到来自android系统的广播信息,第二种是在程序里面注册,第一步首先生成一个继承BoardcastReceiver 的Receiver类,然后使用一个 IntentFilter,在这个IntentFilter里面加上这个Receiver想要接受的广播信息种类就可以注册了,然后在程序down掉的时候,注销Receiver,就可以在程序没有启动的时候不接受android系统的广播信息了。
2:广播的过程可以看成这样一个过程,把想要广播的数据封装在Intent对象里,再封装进一个过滤器对象,再将这个Intent对象广播出去,就可以使符合过滤器要求的Receiver接收到这个Intent了。
AndroidManifest.xml里面注册
<receiver android:name=".TestReceive">
<intent-filter >
<action android:name="android.intent.action.CAMERA_BUTTON"/>
</intent-filter>
</receiver>
在Activity 里面的Oncreate 方法里动态注册
SecReceiver bc = new SecReceiver(myView);
IntentFilter iFilter = new IntentFilter();
iFilter.addAction(MY_ACTION);
BCTestActivity.this.registerReceiver(bc, iFilter);
封装需要广播出去的Intent对象
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("editString", str);
BCTestActivity.this.sendBroadcast(intent); //这行代码相当于把这个Intent对象扔出去就不管了
这是实现OnReceive的 对象
public class SecReceiver extends BroadcastReceiver
{
private TextView myView=null;
public SecReceiver(TextView view) {
// TODO Auto-generated constructor stub
myView=view;
}
public SecReceiver()
{
}
@Override
public void onReceive(Context context, Intent intent) { //形参Intent 就是被广播扔出来的Intent对象。里面有各种数据
// TODO Auto-generated method stub
Toast.makeText(context, "got", Toast.LENGTH_SHORT).show();
String str="";
str=intent.getStringExtra("editString").toString();
myView.setText(str);
}
}
注销Receiver
TestBC2Activity.this.unregisterReceiver(secReceiver);
新手刚学习,有错误的地方欢迎指正。