四大组件之广播
四大组件之广播
火文乐武 发表于2年前
四大组件之广播
  • 发表于 2年前
  • 阅读 10
  • 收藏 0
  • 点赞 2
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 静态广播、动态广播、order

静态广播与动态广播:

1、动态注册的广播永远要快于静态注册的广播,与优先级无关

2、动态注册的广播不是常驻类型,随activity生命周期。注册时,应该在生命周期结束前进行移除。

静态注册的广播是常驻型,当应用程序关闭时,如果有信息广播来,程序也会被系统调用运行。

静态注册:

在清单列表中注册:

 <receiver android:name="com.example.day2201.MyReceiver">
            <intent-filter >
                <action android:name="aaa"/>
            </intent-filter>
        </receiver>

在代码中继承BroadcastReceiver

@Override
	public void onReceive(Context context, Intent intent) {

		String action = intent.getAction();
		if ("aaa".equalsIgnoreCase(action)) {
			String key = intent.getStringExtra("key");
			Toast.makeText(context, "the value is:" + key, Toast.LENGTH_LONG)
					.show();
		}
	}

动态注册

protected void onResume() {
		//	实例化一个receiver对象
		receiver = new MyReceiver();
		
		//	实例化一个IntentFilter对象(等同于manifest中的intent-filter节点)
		IntentFilter filter = new IntentFilter();

		//	filter中添加action,等同于在intent-filter节点中添加action节点
		filter.addAction("zz1603");
	
		//	实现注册,将receiver对象在过滤条件为filter时触发,(action== zz1603)
		registerReceiver(receiver, filter);
		super.onResume();
	}

2、取消

protected void onPause() {
		
		//	判断receiver对象是否为空,如果不为空则取消注册,只需要receiver对象
		if (receiver != null) {
			unregisterReceiver(receiver);
		}
		super.onPause();
	}

 

order:主要是将接收改为getResultExtras(),能够实现广播的篡改

public class MyReceiver02 extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		
		if("zz1603order".equalsIgnoreCase(action)){
			String content = intent.getStringExtra("key");
			
			Bundle bundle = getResultExtras(true);
			
			bundle.putString("order", "i am the changed data");
			
			setResultExtras(bundle);
			
			Toast.makeText(context, " my receiver 02, content = " + content, Toast.LENGTH_LONG).show();
		}
	}

 

 

 

共有 人打赏支持
粉丝 8
博文 32
码字总数 17183
×
火文乐武
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: