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"/>

  

 

  

 

posted @ 2016-01-08 23:12  chenyizh  阅读(163)  评论(0)    收藏  举报