版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章通知、服务与广播4.1通知(Notification)4.2服务(Service)4.3广播Broadcast4.4综合案例4.5实训本章小结
4.1通知(Notification)
4.1.1简单通知任务目标在任务栏上方显示文字通知“你好,这是Android课程”。效果如图4-1-1和图4-1-2所示。图4-1-1运行界面图图4-1-2发送通知图
实施步骤
步骤1:新建一个Module,命名为Ex4_1_1,其它采用默认设置。
步骤2:修改MainActivity.java。
步骤3:修改布局文件activity_main.xml,设置两个按钮。
步骤4:在手机上运行并观察效果。
案例分析
1. MainActivity.java清单分析
2. activity_main.xml清单分析
相关知识
通知(Notification)是一种具有全局效果的通知,可以在系统的通知栏中显示。
通知的目的是告知用户App事件。在平时的使用中,通知主要有以下几个作用:
(1)显示接收到短消息、及时消息等信息,如QQ、微信、新浪、短信。
(2)显示客户端的推送消息,如广告、优惠、版本更新、推荐新闻等。
(3)显示正在进行的事物,如后台运行的程序、音乐播放进度、下载进度等。
创建一个简单的Notification,主要有以下三步:
(1)获取NotificationManager实例。
(2)实例化NotificationCompat.Builder并设置相关属性。必要的属性有三个:小图标,通过setSmallIcon()方法设置;标题,通过setContentTitle()方法设置;内容,通过setContentText()方法设置。这三个属性必须设置,如果不设置则在运行时会抛出异常,其它属性为可选项,可以不设置。
(3)通过builder.build()方法生成Notification对象,并发送通知。
下面介绍Notification的重要方法。
(1) setSmallIcon()与setLargeIcon()。
在NotificationCompat.Builder中有设置通知的图标大小的两个方法。当setSmallIcon()与setLargeIcon()同时存在时,smallIcon显示在largeIcon的右下角;当只设置setSmallIcon()时,smallIcon显示在左侧。
(2)设置提醒标志符flags。
可以设置提醒标志符,向通知添加声音、闪灯和振动效果等达到提醒效果,也可以组合多个属性。
各标志符的作用如表4-1-1所示。
(3) setDefaults(intdefaults)。
向通知添加声音、闪灯和振动效果的最简单方法是使用默认(defaults)属性,可以组合使用多个属性。这是NotificationCompat.Builder中的方法,用于设置在通知到来时,通过什么方式进行提示,其可以设置的默认属性如表4-1-2所示。
(4) setVibrate(long[]pattern)。
(5) .setLights(intledARGB,intledOnMS,intledOffMS)。
在使用这个方法时需要注意:
①只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。
②颜色信息跟设备有关,不是所有的颜色都可以,需要有具体设备支持的颜色。
(6) .setSound(Urisound)。
设置默认或自定义铃声。该方法可以设置消息提醒为默认的铃声,也可以设置为自定义的铃声。系统自带的铃声效果的Uri位置为:Uri.withAppendedPath(Audio.Media.INTERNAL _CONTENT_URI,"2"),设置系统默认的铃声,可以直接使用
(7) setOngoing(booleanongoing)。
设置为ture,表示它为一个正在进行的通知。通常用来表示一个后台任务,用户正在参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载、同步操作、主动网络连接等)。
(8) setProgress(intmax,intprogress,booleanindeterminate)。
设置带进度条通知的方法,可以在下载中使用。进度条通知的属性与含义见表4-1-3。
4.1.2Notification中启动Activity
任务目标
设计一个Notification,点击后启动另一个Acticity。效果如图4-1-3所示。图4-1-3点击通知后跳转Activity
实施步骤
步骤1:使用上一个项目Ex4_1_1。
步骤2:修改java文件MainActivity.java。步骤3:添加NewActivity.java。
步骤4:修改布局文件activity_main.xml。
步骤5:添加一个布局文件new_activity.xml。
步骤6:注册NewActivity,在AndroidManifest.xml中增加如下内容。
步骤7:在手机上运行并观察效果。
案例分析
1. MainActivity.java清单分析
2. NewActivity.java清单分析
3. activity_main.xml清单分析
4. new_activity.xml清单分析
5. AndroidManifest.xml清单分析
App启动后界面与图4-1-1一致,点击“发送通知”按钮后发送Notification,界面与图4-1-2一致,本项目增加了一个功能,点击通知会跳转到一个Activity,跳转后界面如图4-1-3所示。
相关知识
要在通知中启动另一个Activity,需要先使用PendingIntent。
PendingIntent是一种特殊的Intent,主要的区别在于Intent的执行是立刻的,而PendingIntent的执行不是立刻的。
PendingIntent对象,使用方法类的静态方法如下:
(1)跳转到一个activity组件,使用方法getActivity(Context,int,Intent,int)。
(2)打开一个广播组件,使用方法getBroadcast(Context,int,Intent,int)。
(3)打开一个服务组件,使用方法getService(Context,int,Intent,int)。
在Notification中使用PendingIntent分为三步:
4.2服务(Service)
4.2.1Service任务目标练习使用Service,在DDMS的LogCat界面产生LOG信息。
实施步骤
步骤1:新建一个Module,命名为Ex4_2_1,其它默认设置。
步骤2:新建一个继承自Service的类MyService.java,并重写父类的onCreate()、onStartCommand()和onDestroy()方法。
步骤3:修改activity_main.xml作为程序的主布局文件,设置两个按钮,一个用于启动Srevice,一个用于停止Service。
步骤4:修改MainActivity.java,作为程序的主Activity,在里面加入启动Service和停止Service的逻辑。
步骤5:项目中的每一个Service都必须在AndroidManifest.xml中注册,所以还需要编辑AndroidManifest.xml文件。
步骤6:在手机上运行并观察效果。
案例分析
1. MyService.java清单分析
2. activity_main.xml清单分析
3. MainActivity.java清单分析
4. AndroidManifest.xml清单分析
pp运行后的界面如图4-2-1所示,点击“启动服务”按钮,启动Service,因为在这之前Service没有运行,第一次启动后,会执行onCreate()和onStartCommand()两个方法,该Service会在DDMS的LogCAT界面输出两行信息,如图4-2-2所示。图4-2-1Service启动界面图4-2-2点击“启动”按钮后LogCAT界面
当再次点击“启动服务”按钮,因为此时Service已经在运行,则只执行onStartCommand(),输出一行信息,如图4-2-3所示。图4-2-3再次点击“启动”按钮后LogCAT界面
只要Service在运行,启动该Service时就只会执行onStartCommand(),onCreate()方法只有在第一次启动Service时才会执行。点击“停止服务”按钮后,Service被终止,如图4-2-4所示。图4-2-4点击停止按钮后LogCAT界面
相关知识
1. Service简介
Service的启动有两种方式:context.startService()和context.bindService()。它们的区别如下:
(1)通过context.startService()启动Service,则访问者与Service之间没有关联,即使访问者退出了,Service仍然运行。
(2)通过context.bindService()方法启动Service,则访问者与Service绑定在了一起,访问者一旦退出,Service就会终止。
2. Service启动流程
1) context.startService()启动流程
context.startService()→onCreate()→onStartCommand()→Servicerunning→context.stopService()→onDestroy()→Servicestop
调用startService的生命周期为onCreate→onStart
Command(可多次调用)→onDestroy,如图4-2-5所示。图4-2-5Service的生命周期
2) context.bindService()启动流程
context.bindService()→onCreate()→onBind()→Servicerunning→onUnbind()→onDestroy()→Servicestop
3. Service方法介绍
1) onBind()方法
当另一个组件想通过调用bindService()与服务绑定(例如执行RPC)时,系统将调用此方法。
2) onCreate()方法
首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用onStartCommand()或onBind()之前)。
3) onStartCommand()方法
当另一个组件(如Activity)通过调用startService()请求启动服务时,系统将调用此方法。
onStartCommand(Intentintent、intflags、intstartId)方法有3个传入参数,它们的含义如下:
4) onDestroy()
当服务不再使用且将被销毁时,系统将调用此方法。服务应该实现此方法来清理所有资源,如线程、注册的侦听器、接收器等,这是服务接收的最后一个调用。
4.2.2bindService
任务目标
练习使用bindService,在DDMS的LogCat界面产生LOG信息,说明绑定Service时会执行哪些方法,解绑Service时会执行哪些方法。
实施步骤
步骤1:新建一个Module,命名为Ex4_2_2,其它设置默认。
步骤2:新建一个类LocalService.java。步骤3:修改MainActivity.java。
步骤4:如下清单activity_main.xml是布局文件,设置了三个按钮。
步骤5:在AndroidManifest.xml中注册Service,增加如下内容。
实施步骤
步骤1:新建一个Module,命名为Ex4_2_2,其它设置默认。
步骤2:新建一个类LocalService.java。
步骤3:修改MainActivity.java。
步骤4:如下清单activity_main.xml是布局文件,设置了三个按钮。
步骤5:在AndroidManifest.xml中注册Service,增加如下内容。
运行界面如图4-2-6所示。图4-2-6运行界面
点击“绑定服务器”按钮,执行绑定服务器功能,如图4-2-7所示。当第一次点击绑定服务时,LocalService服务端的onCreate()、onBind方法会依次被调用,此时客户端的ServiceConnection的onServiceConnected()被调用并返回LocalBinder对象,接着调用LocalBinder的getService方法返回LocalService实例对象,此时客户端便持有LocalService的实例对象,可以任意调用LocalService类中的声明公共方法。图4-2-7点击绑定服务器
绑定服务器后,多次点击“绑定服务器”按钮进行多次绑定,如图4-2-8所示。图4-2-8多次点击绑定服务器
再点击获取服务端的数据,点击了3次,通过getRandomNumber()获取了服务端的3个不同数据,如图4-2-9所示。图4-2-9点击获取数据
最后点击解除绑定,如图4-2-10所示,此时LocalService的onUnBind、onDestroy方法依次被回调,并且多次绑定只需一次解绑即可。这说明绑定状态下的Service生命周期方法的调用依次为onCreate()、onBind、onUnBind、onDestroy。图4-2-10点击解除绑定
相关知识
bindService使用开发步骤如下:
(1)创建bindService服务端,继承自Service并在类中,创建一个实现IBinder接口的实例对象并提供公共方法给客户端调用。
(2)从onBind()回调方法返回此Binder实例。
(3)在客户端中,从onServiceConnected()回调方法接收Binder,并使用提供的方法调用绑定服务。
在客户端中创建了一个ServiceConnection对象conn,代表与服务的连接,它只有两个方法,分别是onServiceConnected方法和onServiceDisconnected方法。这两个方法讲解如下:
(1) onServiceConnected(ComponentNamename,IBinderservice),系统会调用该方法以传递服务的onBind()方法返回的IBinder。
(2) onServiceDisconnected(ComponentNamename),Android系统会在与服务的连接意外中断时(例如当服务崩溃或被终止时)调用该方法。
(3) bindService(Intentservice,ServiceConnectionconn,intflags),该方法执行绑定服务操作,其中Intent是要绑定的服务(也就是LocalService)的意图,而ServiceConnection代表与服务的连接,它只有两个方法,前面已分析过,flags则是指定绑定时是否自动创建Service,0代表不自动创建,BIND_AUTO_CREATE则代表自动创建。
(4) unbindService(ServiceConnectionconn),该方法执行解除绑定的操作,其中ServiceConnection代表与服务的连接。
4.2.3IntentService
任务目标
练习使用IntentService,在DDMS的LogCat界面产生LOG信息,演示IntentService启动后执行的动作。
实施步骤
步骤1:新建一个Module,命名为Ex4_2_3,其它默认设置。
步骤2:新建一个Service,如下的intentServiceTest.java所示,实现了一个继承了IntentService的类intentServiceTest.java,并在各个方法中插入LOG语句,显示调试信息。
步骤3:修改MainActivity.java,启动intentServiceTest类。
步骤4:修改布局文件activity_main.xml,实现一个按钮并设定了点击动作执行的方法。
步骤5:在AndroidManifest.xml中注册IntentService,增加如下语句。
步骤6:在手机上运行并观察效果。
案例分析
1. intentServiceTest.java清单分析
2. MainActivity.java清单分析
MainActivity.java是主类。
行16~32:实现按钮点击动作,如图4-2-11所示。图4-2-11启动界面
程序运行如图4-2-12所示。从结果可以看到,onCreate方法只执行了一次,而onStartCommand和onStart方法执行了两次,开启了两个WorkThread,这就证实了之前所说的启动多次但IntentService的实例只有一个的说法,这跟传统的Service是一样的。Operation1也是先于Operation2打印,并且两个操作间停顿了2s,最后是onDestroy销毁了IntentService。图4-2-12输出信息
相关知识
在Android中,应用的响应性被活动管理器(ActivityManager)和窗口管理器(WindowManager)这两个系统服务所监视。当用户触发了输入事件后(如键盘输入,点击按钮等),如果应用5秒内没有响应,那么,Android会认为该应用无响应,便会弹出(ApplicationNoResponse)无响应异常对话框。
IntentService可以看作Service和HandlerThread的结合体,在完成使命之后会自动停止,适合需要在工作线程处理与UI无关任务的场景。IntentService有如下特点:
(1) IntentService是继承自Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作。
(2)当任务执行完后,IntentService会自动停止,不需要去手动结束。
(3)如果多次启动IntentService,那么每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推,直到执行自动结束。
(4)所有请求都在一个单线程中,不会阻塞应用程序的主线程(UIThread),同一时间只处理一个请求。
只重写onHandleIntent()方法后LOG信息,从图4-2-13展示出的信息中可以看到,两个操作Operation1和Operation2均得到了执行。图4-2-13只实现onHandleIntent()方法后输出结果
4.3广播Broadcast
任务目标Service在后台计数,利用广播Broadcast把计数值传递给主界面,在主界面中显示出计数值。界面如图4-3-1所示。图4-3-1启动界面
实施步骤
步骤1:新建一个Module,命名为ex4_3_1,其它默认设置。
步骤2:新建一个接口文件ICounterService.java。步骤3:新建一个Service文件CounterService.java,用于实现后台计数。
步骤3:修改文件MainActivity.java。
步骤4:修改布局文件activity_main.xml。
步骤5:新建变量文件string.xml。
步骤6:修改文件AndroidManifest.xml,注册Service。
步骤7:在手机上运行并观察效果。
案例分析
1. ICounterService.java清单分析
2. CounterService.java清单分析
3. MainActivity.java清单分析
4. activity_main.xml清单分析
5. string.xml清单分析
6. AndroidManifest.xml清单分析
程序运行后的界面如图4-3-1所示,有两个按钮:一个用于启动计数,另一个用于停止计数。此外,还有一个计数值。
启动后,通过图4-3-2的LogCat信息可以看到,创建了计数服务器,然后连接到服务器上。图4-3-2启动后LogCat信息
单击“开始计数”启动计数程序,获得返回的计数值,如图4-3-3所示。图4-3-3运行界面
运行时的LogCat信息如图4-3-4所示,COUNTER的数值在不断变化,LogCat也在不断地输出提示信息。图4-3-4运行中的LogCat信息
点击“停止计数”按钮停止计数后,计数值保持不变,如图4-3-5所示。图4-3-5停止界面
停止计数后,LogCat输出的信息如图4-3-6所示。从图中可以看到,停止计数后Service依然发送了一个计数值,并被客户端接收到了。图4-3-6停止后LogCat信息
若退出App,LogCat输出的信息如图4-3-7所示,从图中可以看到,当App退出后,Service也被销毁了。图4-3-7退出后LogCat信息
相关知识
Broadcast是Android四大组件之一,也是一种广泛运用在应用程序之间传输信息的机制,Android发送的广播内容是一个Intent,这个Intent中可以携带要发送的数据。
广播作为Android组件间的通信方式,可以使用的场景如下:
(1)同一App内有多个进程的不同组件之间的消息通信。
(2)不同App组件之间消息的通信。
广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播的Intent可以被订阅了此Intent的多个广播接收者所接收。要实现一个广播接收者的方法有以下两步。
第一步:定义广播接收者,继承BroadcastReceiver,并重写onReceive()方法。
第二步:订阅感兴趣的广播Intent。订阅方法有两种:
(1)使用代码进行订阅(动态订阅)。
(2)在AndroidManifest.xml文件中的<application>节点里进行订阅(静态订阅)。
使用广播有以下两个步骤。
第一步:广播的接收者需要通过调用registerReceiver函数告诉系统,它对什么样的广播有兴趣,即指定IntentFilter,并且向系统注册广播接收器,即指定BroadcastReceiver。
第二步:广播的发送者通过调用sendBroadcast函数来发送一个指定的广播,并且可以指定广播的相关参数。
4.4综合案例
任务目标设计一个带进度条的Notification,利用DownloadService下载,然后在Notification中显示下载进度
实施步骤
步骤
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校安全工作与应急管理计划
- 电视设备租赁合同三篇
- 数控板料折弯机相关行业投资规划报告
- 亚硝酸盐中毒解毒药行业相关投资计划提议
- 型材:异型钢相关项目投资计划书
- 《液压与气动》课件 1齿轮泵的结构和工作原理
- 市场管理服务相关项目投资计划书
- 铁路行业安全巡查的标准化计划
- 《解除迷茫规划人生》课件
- 《销售技巧培训课件》课件
- 个别化教育实施方案
- 中华传统文化与人生修养智慧树知到答案章节测试2023年四川大学
- 新疆2022年中考道德与法治真题试卷解析版
- 旅游英语:导游常用英语对话2篇
- 财务指标税负监控表(会计财务管理报表模板)
- SB/T 10952-2012实木复合门
- 大洋洲-澳大利亚(区域课件)【知识精讲+备课精研】 高中区域地理教学 课件 (世界地理、中国地理)
- GB/T 917-2017公路路线标识规则和国道编号
- GB/T 617-2006化学试剂熔点范围测定通用方法
- GB/T 16311-1996道路交通标线质量要求和检测方法
- 《学法-知法-守法》PPT-完美版
评论
0/150
提交评论