Android - 广播机制
一、接受广播
1、如何创建一个广播接收器:新建一个类继承自BroadcastReceiver,重写OnReceive()方法,OnReceive() 方法中不允许开启其他线程;
2、通过registerReceiver() 配合 IntentFilter 动态注册广播接收器,动态注册的广播接收器一定要取消注册 unregisterReceiver();
3、通过配置,静态注册接收器
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="com.example.test.MYBROADCAST"></action>
</intent-filter>
</receiver>
二、发送自定义广播
1、广播可以分为两种类型:标准广播,所有接收器几乎都会在同一时刻接收到该广播消息;有序广播:同一时刻只会有一个接收器能够收到该消息,并且接收器还可以截断广播;
2、Context类的实例方法 sendBroadcast() 发送标准广播;实例方法 sendOrderedBroadcast() 发送有序广播,可以调用 abortBroadcast() 截断广播;
三、使用本地广播
1、系统全局广播:发出的广播可以被其他任何应用程序接收到;本地广播:发出的广播只能够在应用程序的内部进行传递;
2、使用 LocalBroadcastManager 对本地广播进行管理;
LocalBroadcastManager localBroadcastMgr=LocalBroadcastManager.getInstance(context); localBroadcastMgr.registerReceiver(); localBroadcastMgr.sendBroadcast();
四、注意事项
1、广播接收器中启动活动(Activity),需要给Intent加入FLAG_ACTIVITY_NEW_TASK标志;
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2、广播接收器中弹出对话框,需要设置对话框类型为TYPE_SYSTEM_ALERT;
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle("Warning");
builder.setMessage("you are forced to offline.Please try to login again.");
builder.setCancelable(false); //设置“不能被取消”
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent i=new Intent(context,LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //广播接收器中弹出对话框需要设置该标识
context.startActivity(i);
}
});
AlertDialog alertDialog=builder.create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
//ps: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
浙公网安备 33010602011771号