下面介绍一下广播机制原原理:
一.Broadcast Receive为广播接收器,它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,而广播处理机制是系统级别的。 二.事件的广播比较简单,构建Intent对象,调用sendBroadcast()方法将广播发出。事件的接收是通过定义一个继承BroadcastReceiver类来实现,继承该类后覆盖其onReceiver方法,并在该方法中相应事件。 1.创建Broadcast,首先要有部件发送Broadcast,发送Broadcast的代码如下
Intent intent1 = new Intent(AC1);//AC1为reciver的动作名称。
sendBroadcast(intent1);
此处的AC1要定义:
static final String AC1 = "com.test.action.NEW_BC1";//
MainActivity:
Intent intent=new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("msg","请回复信息");
sendBroadcast(intent);
MyReceiver:
public calss MyReceiver extends BroadcastReceiver{
public void onReceiver(Context ctx,intent intent){
//从Intent中获得信息
String msg=intent.getString("msg");
Toast.makeText(ctx,msg,Toast.LENGTH_LONG).show()
}
}
三.系统广播事件的使用 1. 这些广播是系统自动发出,我们直接定义事件接收器进行接收。
通过配置文件注册
MyReceiver2:
public class MyReceiver2 extends BroadcastReceiver{
public void onReceiver( Context context,Intent intent){
Log.i("my_tag","BOOT_COMPLETED")
}
}
// AndroidMainifest.xml: 第一种注册方式
<receiver android:name="MyReceiver2">
<intent-filter>
<android android:name="android.intent.android.BOOT_COMPLETED">
</intent-filter>
</receiver>
通过代码注册:
IntentFilter filter=new IntentFilter();//实例化
//实例化Receiver
MyReceiver2=new MyReceiver2(); // 第二种注册方式 //注册Receiver
registerReceiver(r,filter); //注销Receiver
unregisterReceiver(r);
四.Notification和NotificationManager的使用 Broadcast Receiver组件并没有提供可视化的界面来显示广播信息。这里我们可以使用Notification和Notification Manager来实现可视化的信息的界面,通过使用它们 ,我们可以显示广播信息的内容,图标及震动信息。 五.AlarmManager的使用
现在的手机普遍都会有一个闹钟功能,如果使用Android来实现一个闹钟,可以使用AlarmManager来实现。AndroidManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个任务,AlarmManager对象一般不直接实例化,而是通过Context.getSystemService(Context.ALARM_SERVICE)方法获得。
机制的方式也是有所不同的,但大家所需要的。
帮助文档也写得很明白。
|
补充实例: 发送方: Intent intent = new Intent("cn.com.broadcast.current.percent"); intent.putExtra("current_percent",currentPercent); context.sendBroadcast(intent);
接收方: //broadcast IntentFilter filter = new IntentFilter("cn.com.broadcast.current.percent"); GalleryUploadMain.this.setProgressBroadcast = new SetProgressBroadcast(); GalleryUploadMain.this.registerReceiver(GalleryUploadMain.this.setProgressBroadcast,filter);//注册广播 //销毁广播,在onDestroy()方法中 super.unregisterReceiver(GalleryUploadMain.this.setProgressBroadcast);
//Broadcast public class SetProgressBroadcast extends BroadcastReceiver {
@Override public void onReceive(Context context,Intent intent){ if("cn.com.broadcast.current.percent".equals(intent.getAction())){ //判断是否符合广播条件,符合则: currentPercent = intent.getIntExtra("current_percent",0); progressBar.setProgress((int)(100*currentPercent)); if (currentPercent == 1){ progressBar.setVisibility(View.GONE); } } } }
|