章丘公司做网站,网站页面设计制作费,wordpress添加插件,上海建设公司注册广播是什么#xff1f;
一种相互通信#xff0c;传递信息的机制#xff0c;组件内、进程间#xff08;App之间#xff09;
如何使用广播#xff1f;
组成部分
发送者-发送广播
与启动其他四大组件一样#xff0c;广播发送也是使用intent发送。 设置action#xff…广播是什么
一种相互通信传递信息的机制组件内、进程间App之间
如何使用广播
组成部分
发送者-发送广播
与启动其他四大组件一样广播发送也是使用intent发送。 设置action表示这个广播可以被哪些接收器接收到通过 putExtra传递额外的bundle信息 Intent intent new Intent();intent.setAction(SEND_STATIC_ACTION);intent.putExtra(data,静态广播);sendBroadcast(intent);
接收者-广播接收
创建广播接收器 继承 BroadcastReceiver 类 或直接new该类的对象实例然后重写方法 onReceive在该方法中处理接收到的广播消息。 注册广播接收器
注册广播接收器有两种办法静态注册和动态注册,可以分为两种广播 静态广播常驻内存中是在Manifest文件中注册的可在App未启动时就监听广播动态广播App启动后注册是在代码中注册以及解除注册的广播解除注册后广播也随时结束。 同时注册时动态优于静态 静态广播
创建广播接收器类
// 静态广播接收器
public class StaticBroadcastReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle intent.getExtras();Log.d(BroadcastReceiver,静态广播接收器接受了一个 - bundle.getString(data));}
}
在 Manifest文件中注册广播接收器 receiver android:name.broadcastreceiver.receiver.StaticBroadcastReceiverandroid:exportedtrueintent-filteraction android:namesend_static_action/action/intent-filter/receiver 动态广播
创建广播接收器
直接new该类的对象实例然后重写方法 onReceive
// 创建广播接收器private BroadcastReceiver dynamicBroadcastReceiver new BroadcastReceiver() {Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle intent.getExtras();Log.d(BroadcastReceiver,动态广播接收器接受了一个 - bundle.getString(data));}};
注册广播接收者器类
一般在Activity的onCreate方法中注册
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broadcast_study);// 动态注册广播接收器IntentFilter intentFilter new IntentFilter();intentFilter.addAction(SEND_DYNAMIC_ACTION);registerReceiver(dynamicBroadcastReceiver,intentFilter);}解除注册 Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(dynamicBroadcastReceiver);} 无序广播、有序广播
按照广播接收顺序划分 无序广播-普通广播所有接收器接收的广播没有先后顺序几乎同时收到消息有序广播发送的广播会按照接收器的优先级顺序被接受同一时刻只会有一个接收器收到广播且收到广播之后可以对广播进行截断和修改 有序广播
发送
使用语句 sendOrderedBroadcast
广播接收器
注册时设置优先级优先级越大越先收到广播
// 动态注册广播接收器IntentFilter intentFilter new IntentFilter();intentFilter.addAction(SEND_DYNAMIC_ACTION);intentFilter.setPriority(100);registerReceiver(dynamicBroadcastReceiver, intentFilter);// 注册有序广播// 有序广播设置优先级优先级越大越先收到IntentFilter intentFilter1 new IntentFilter();intentFilter1.addAction(SEND_DYNAMIC_ACTION);intentFilter1.setPriority(101);registerReceiver(broadcastReceiver2, intentFilter1);
截断广播 abortBroadcast(); 优先级高的广播接收器截断广播之后下游的广播就不再会收到。 修改广播 上游的广播 使用 setResultExtras 传递一个新的 Bundle 或者使用 setResultData 传递一个字符串下游使用 getResultExtras 接收 Bundle使用 getResultData 接收字符串 全局广播、本地广播
按照广播的传播范围划分 本地广播app内部全局广播整个手机内部 全局广播
普通广播就是全局广播。
一个发送全局广播在另一个app中接收到的例子
App1
1.发送广播
Intent intent new Intent();
intent.setAction(SEND_GLOBAL_ACTION);
intent.putExtra(data_global, 发送了一条全局广播);
sendBroadcast(intent);
App2
1.创建广播接收器处理接收数据 // 接收来自 Androidsutdio App的广播// 创建广播接收器private BroadcastReceiver broadcastReceiver new BroadcastReceiver() {Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, intent.getExtras().getString(data_global), Toast.LENGTH_LONG).show();Log.d(接受全局广播, intent.getExtras().getString(data_global));}};
2.注册广播接收器
action与发送广播的action相同 Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 注册广播接收器IntentFilter intentFilter new IntentFilter();intentFilter.addAction(send_global_action);registerReceiver(broadcastReceiver, intentFilter);}
3.解除广播接收器 Overrideprotected void onDestroy() {super.onDestroy();// 解除广播接收器unregisterReceiver(broadcastReceiver);} 此时是由App2弹出的这条弹窗。
app2的logcat: 本地广播
只能使用动态注册因为本地广播只能监听这个app内部的广播在注册发送广播时需要使用到LocalBroadcastManager 类。
注册 Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broadcast_study);// 注册本地广播 - 只能动态注册LocalBroadcastManager localBroadcastManager LocalBroadcastManager.getInstance(this);IntentFilter local_intentFilter new IntentFilter();intentFilter1.addAction(SEND_LOCAL_ACTION);localBroadcastManager.registerReceiver(new LocalBroadcastReceiver(),local_intentFilter);}
发送 Intent intent new Intent();intent.setAction(SEND_LOCAL_ACTION);intent.putExtra(data, 本地广播);localBroadcastManager.sendBroadcast(intent); 解除注册 Intent intent new Intent();intent.setAction(SEND_LOCAL_ACTION);intent.putExtra(data, 本地广播);localBroadcastManager.sendBroadcast(intent);
广播的作用
传递信息。