版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BroadcastReceiver前言本章将深入探讨Android应用中的广播,介绍如何通过广播来实现组件之间的通信,以及如何通过EventBus来更加灵活地管理应用内的事件流。此外,还将介绍如何使用AppWidget创建各种实用的桌面应用,以为用户提供更为便捷的功能和展示信息。03创建桌面应用目录01发送与监听广播02管理事件
9.1发送与监听广播
9.1.1BroadcastReceiver简介BroadcastReceiver(广播接收者)是一种常见的Android组件,用于接收和处理系统或应用发出的Broadcast(广播消息)。可以是系统事件(如设备启动或网络状态改变),也可以是应用内部定义的事件。BroadcastReceiver类似于一个监听器,可以在后台接收特定的Broadcast,并执行相应的操作。使用BroadcastReceiver可以实现不同组件之间的通信,无论这些组件是应用内部的不同部分,还是不同的应用。BroadcastReceiver是基于发布/订阅模式的。应用可以注册自己感兴趣的Broadcast,当发出这些Broadcast时,BroadcastReceiver就会被触发并执行。
9.1发送与监听广播
9.1.2创建BroadcastReceiver首先,创建一个继承BroadcastReceiver的类,这将是“南狮广播接收器”。这个接收器用于监听特定的广播动作,并在收到Broadcast时执行相应的操作。publicclassNanShiBroadcastReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){//获取动作Stringaction=intent.getAction();
//检查广播动作是否匹配if(action!=null&&action.equals("com.example.nanshi.ACTION")){performNanShiShow(context);}}
privatevoidperformNanShiShow(Contextcontext){//在这里执行南狮表演的操作,如播放音乐、展示动画等//简单地显示一个ToastToast.makeText(context,"南狮正在表演!",Toast.LENGTH_SHORT).show();}}
9.1发送与监听广播
9.1.2创建BroadcastReceiver其次,在AndroidManifest.xml文件中注册BroadcastReceiver,以便系统能够识别并调用它。使用<receiver>元素实现注册,并使用<intent-filter>元素指定自己感兴趣的广播动作。<receiverandroid:name=".NanShiBroadcastReceiver"android:enabled="true"android:exported="true"/>
9.1发送与监听广播
9.1.2创建BroadcastReceiver在使用AndroidStudio进行Android应用开发时,BroadcastReceiver不需要手动创建,可以通过开发平台一键生成。把鼠标指针移动到包名处并右击,在弹出的快捷菜单中选择“New”→“Other”→“BroadcastReceiver”命令,弹出如图9-1所示的“NewAndroidComponent”对话框。
9.1发送与监听广播
9.1.3注册BroadcastReceiver动态注册BroadcastReceiver是在程序代码中动态实现的。这种方式适用于应用局部范围的BroadcastReceiver,只有在特定的上下文中才会接收到Broadcast。publicclassMainActivityextendsAppCompatActivity{
NanShiBroadcastReceiverreceiver;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
receiver=newNanShiBroadcastReceiver();IntentFilterintentFilter=newIntentFilter();intentFilter.addAction("com.example.nanshi.ACTION");registerReceiver(receiver,intentFilter);}
@OverrideprotectedvoidonDestroy(){super.onDestroy();
//在Activity销毁时取消注册BroadcastReceiverunregisterReceiver(receiver);}}
9.1发送与监听广播
9.1.4发送BroadcastBroadcastReceiver用于接收Broadcast,而发送Broadcast则指向系统或其他应用发送Broadcast。通过发送Broadcast可以触发特定事件或通知其他组件进行相应的操作。在发送Broadcast时需要遵循以下步骤。首先创建一个Intent,用于描述广播动作和数据。其次,调用sendBroadcast()方法发送Broadcast。//创建IntentIntentbroadcastIntent=newIntent();broadcastIntent.setAction("com.example.nanshi.ACTION");//发送BroadcastsendBroadcast(broadcastIntent);
9.1发送与监听广播
9.1.4发送BroadcastBroadcastReceiver用于接收Broadcast,而发送Broadcast则指向系统或其他应用发送Broadcast。通过发送Broadcast可以触发特定事件或通知其他组件进行相应的操作。在发送Broadcast时需要遵循以下步骤。首先创建一个Intent,用于描述广播动作和数据。其次,调用sendBroadcast()方法发送Broadcast。//创建IntentIntentbroadcastIntent=newIntent();broadcastIntent.setAction("com.example.nanshi.ACTION");//发送BroadcastsendBroadcast(broadcastIntent);
9.2
管理事件
9.2.1EventBus架构概念定义作用备注发布者(Object)事件发布对象(EventBus.post(事件))创建事件的对象
订阅者(Object)事件订阅方法的接收者(Method.invokde(订阅者,事件))处理事件的对象
发布线程(Thread)创建并发布事件的线程用于发布事件(执行EventBus.post()方法)UI线程和工作现场均可以作为发布线程或订阅线程订阅线程(Thread)接收并操作事件的线程用于承载执行订阅方法POSTING:发布线程|MAIN:主线程|MAIN_ORDERED:主线程(有序)|BACKGROUND:后台线程|ASYNC:异步线程订阅方法(Subscribe)使用@Subscribe注解修饰的方法用于订阅者接收事件后的处理逻辑
使用@Subscribe注解可以设置线程、粘性、优先级事件(Class<?>)组件/线程之间通信的数据单元存储需要操作的通信信息任何类型的对象都可以被当作事件发送出去事件哈希表(HashMap)一种数据结构(存储特点:快速插入和搜索)Key
:事件类型(Class<?>)|Value:订阅者列表(CopyOnWriterArrayList)在注册订阅者时,订阅关系会被存储到事件哈希表中
9.2
管理事件
9.2.1EventBus架构EventBus架构是基于发布/订阅模式的,订阅者通过注册到EventBus上来订阅特定类型的事件。在发布事件时,EventBus会根据事件类型找到对应的订阅者,并将事件传递给它们,从而实现组件之间解耦及通信。
9.2
管理事件
9.2.2使用EventBus首先,在项目的build.gradle文件中添加EventBus的依赖项;其次,创建一个Java类来表示事件。该类可以包含任意数据和方法,作为消息的载体。implementation'org.greenrobot:eventbus:3.2.0'publicclassMessageEvent{privatefinalStringmessage;
publicMessageEvent(Stringmessage){this.message=message;}
publicStringgetMessage(){returnmessage;}}
9.2
管理事件
9.2.2使用EventBus最后,在希望接收事件的组件中注册订阅者。通常情况下在Activity或Fragment的生命周期方法中进行注册和注销。@OverridepublicvoidonStart(){super.onStart();//注册定订阅者以接收事件
EventBus.getDefault().register(this);}@OverridepublicvoidonStop(){super.onStop();EventBus.getDefault().unregister(this);}
9.3创建桌面应用
9.3.1AppWidget简介AppWidget是Android平台上的小型应用,用于在用户的主界面中显示有限的信息,为用户提供快捷访问应用功能的便捷方式。AppWidgets允许用户在桌面上直接查看应用的部分内容,无须打开完整的应用,可以提供快速、高效的操作体验。AppWidget通常用于展示静态或动态的内容,如天气、最新新闻、音乐播放器控制等。用户可以根据个人喜好,自由添加和删除AppWidget,并根据需要调整AppWidgets的位置和大小。
9.3创建桌面应用
9.3.1AppWidget简介在AndroidStudio中可以快速创建AppWidget。把鼠标指针移动到包名处并右击,在弹出的快捷菜单中选择“New”→“Widget”→“AppWidget”命令,弹出如图所示的“NewAndroidComponent”对话框。
9.3创建桌面应用
9.3.2AppWidget布局设计快速创建AppWidget后,即可在layout目录中看到一个new_app_widget.xml文件,默认生成RelativeLayout,且里面只有一个TextView。这里把布局管理器修改为LinearLayout,且里面有TextView和ImageView。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:textSize="30sp"/>
<ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"/>
</LinearLayout>
9.3创建桌面应用
9.3.3实现AppWidgetProviderInfoAppWidgetProviderInfo用于描述已安装的AppWidget提供程序的元数据。该类中的字段对应于<appwidget-provider>元素中的属性,即对应本示例中的lingnan_app_widget_info.xml文件。打开该文件可以发现,只有键值对形式的数据。<?xmlversion="1.0"encoding="utf-8"?><appwidget-providerxmlns:android="/apk/res/android"android:configure=".baiyunu.chapter_9.NewAppWidgetConfigureActivity"android:description="@string/app_widget_description"android:initialKeyguardLayout="@layout/new_app_widget"android:initialLayout="@layout/new_app_widget"android:minWidth="40dp"android:minHeight="40dp"android:previewImage="@drawable/example_appwidget_preview"android:previewLayout="@layout/new_app_widget"android:resizeMode="horizontal|vertical"android:targetCellWidth="1"android:targetCellHeight="1"android:updatePeriodMillis="86400000"android:widgetCategory="home_screen"/>
9.3创建桌面应用
9.3.4拓展AppWidgetProviderNewAppWidget继承了AppWidgetProvider,并重写了onUpdate()方法、onDeleted()方法、onEnabled()方法和onDisabled()方法。在onUpdate()方法中,AndroidStudio默认遍历appWidgetIds(每个AppWidget都有独一无二的ID)。staticvoidupdateAppWidget(Contextcontext,AppWidgetManagerappWidgetManager,intappWidgetId){CharSequencewidgetText=NewAppWidgetConfigureActivity.loadTitlePref(context,appWidgetId);//ConstructtheRemoteViewsobjectRemoteViewsviews=newRemoteViews(context.getPackageName(),R.layout.new_app_widget);views.setTextViewText(R.id.appwidget_text,widgetText);//InstructthewidgetmanagertoupdatethewidgetappWidgetManager.updateAppWidget(appWidgetId,views);}
9.3创建桌面应用
9.3.5声明AppWidget因为AppWidget本质上也是BroadcastReceiver,所以在AndroidManifest.xml文件中可以看到已经配置了<receiver>元素,将其与AppWidget
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 谷氨酸发酵过程故障诊断:方法、应用与展望
- 调水工程对太湖水环境的改善效应与优化策略研究
- 读写互融素养共生:高中语文读写一体化教学探索
- 2026浙江杭州滨文中学编外教师招聘78人考试模拟试题及答案详解
- 语言学论文摘要中语法隐喻现象的多维度剖析
- 语料库方法:革新大学英语教学与研究的新范式
- 语境视角下微博热点话题检测的深度探索与实践
- 语块槽孔-框架模式在高中英语写作教学中的应用与效能探究
- 询价制度变革下A股上市公司IPO抑价的实证剖析与深度洞察
- 词汇语用学视角下英语广告语的语用充实现象探究
- 大宗贸易白糖居间合同协议书范本
- 【MOOC答案】《人力资源管理》(南京邮电大学)章节作业慕课答案
- 国家新型城镇化规划(2025年-全文)
- 贵州省贵阳市2025届高一下化学期末联考模拟试题含解析
- 病房静音管理方案(3篇)
- DB13T 1510-2012 流态粉煤灰水泥混合料施工技术指南
- 《现代农业技术与装备》课件
- 化工总控工(技师高级技师)考试题库
- 2025儿童暴发性心肌炎诊治专家建议解读课件
- 烟草执法风险防控课件
- 2024年至2025年贵州省黔西南州公开招聘警务辅助人员辅警结构化面试能力提升题库一含答案
评论
0/150
提交评论