,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。Service使用步骤如下:继承service类;AndroidManifast.xml配置清单文件中
节点里对服务进行配置;服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务。
通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用 Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()→onStart(),如果服务已经启动再次调用只会触发onStart()方法使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()→onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务onUnbind()→onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()→onDestory()。
2.4.3 关于ContentProvider内容提供者
Content Provider,即内容提供商或者内容提供器。再具体解释就是:CP是移动数据业务内容提供商,或者叫移动增值业务内容提供商。Content Provider认证,即CP认证,指允许内容提供商提供内容。(如腾讯CP认证允许QCC商家提供QCC虚拟服务内容并自行销售。)Android中的Content provider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的方式之一,还有文件,sharePreference,SQLite数据 库等方式存储共享数据库,但是ContentPrivider更好的提供了数据共享接口的统一性。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。
Android提供了一些主要数据类型的Content provider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些android提供的Content provider。可以获得这些Content provider,查询它们包含的数据,当然前提是已获得适当的读取权限。总的一句:内容提供器是应用程序之间共享数据的接口,Android系统将这种机制应用到方方面面。比如:联系人提供器专为不同应用程序提供联系人数据;设置提供器专为不同应用程序提供系统配置信息,包括内置的设置应用程序等。
2.4.4 关于BroadcastReceiver广播接收器
广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
BroadcastReceiver事件分类:系统广播事件,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。
用户自定义的广播事件有以下几种:
注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver类;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。两种方式都需要IntentFIlter。
发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
2.5 Intent的详细解析
2.5.1 Intent分析
所谓Intent,就是一种运行时的绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过Intent向android系统发出某种情求或者意愿,然后android系统会到根据请求查询各个组件声明的IntentFilter,找到需要的组件并运行它。
Activity、Service和BroadcastReceiver,他们都是通过Intent机制激活的,不同类型的组件有传递Intent的不同方式[7]。而本系统中就是要激活一个新的Activity,可以通过调用Context.startActivity()方法。这个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),为了能够使用该方法,所有的activity类都必须在AndroidManifest.xml文件中定义有相关的"activity"项。然后根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或者传递信息。
2.5.2 Intent的抽象描述
在Android参考文档中,对意图的定义是执行某操作的一个抽象描述。该抽象描述的具体内容如下:
首先,它是要执行的动作的一个简要描述,如查看、修改等,Android定义了一套标准动作。此外,还可以根据应用的需要,定义自己的动作,并可定义相应的活动来处理自定义的动作。
其次,是执行动作要操作的数据,Android采用指向数据的一个URI方式来实现。
另外,除了动作和数据这两个重要属性外,还有一些附加属性:
类别:被执行动作的附加信息。例如LAUNCHER_CATEGORY表示意图的接受者应该在Launcher中作为顶级应用出现;而ALTERNATIVECATEGORY表示当前的意图是一系列的可选动作中的一个,这些动作可以在同一个数据上执行。
数据类型:显式指定意图的数据类型。一般意图的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用指定的类型。
组件:指定意图的目标组件的类名称。通常Android会根据意图中包含的其它属性的信息,比如动作、数据/数据类型、类别进行查找,最终找到一个与之匹配的目标组件。
附加信息:是其它所有附加信息的集合。使用附加信息可以为组件提供扩展信息,比如,如果要执行"发送电子邮件"这个动作,可以将电子邮件的标题、正文等保存在附加信息里,传给电子邮件发送组件。总之,动作、数据/数据类型、类别和附加信息一起形成了一种语言。这种语言使系统能够理解诸如"查看某联系人的详细信息"之类的短语。随着应用不断的加入到系统中,它们可以添加新的动作、数据/数据类型和类别来扩展这种语言。应用也可以提供自己的活动来处理已经存在的这样的"短语",从而改变这些"短语"的行为。
2.5.3 Android如何解析Intent
在应用中,可以以两种形式来使用Intent:
(1)直接意图:指定了组件属性的意图。通过指定具体的组件类,通知应用启动对应的组件。
(2)间接意图:没有指定组件属性的意图。这些意图需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此意图的组件。对于直接意图,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接意图,通过解析,将意图映射给可以处理此意图的活动、意图接收器或服务。
意图解析机制主要是通过查找己注册在AndroidManifest.xml中的所有意图过滤器及其中定义的意图,最终找到匹配的意图。在这个解析过程中,Android是通过意图的动作、数据类型、类别这三个属性来进行判断的,判断方法如下:
如果意图指明定了动作,则目标组件的意图过滤器的动作列表中就必须包含有这个动作,否则不能匹配。
如果意图没有提供数据类型,系统将从数据中得到数据类型。和动作一样,目标组件的数据类型列表中必须包含意图的数据类型,否则不能匹配。
如果意图中的数据不是content:类型的URI,而且意图也没有明确指定它的数据类型,将根据意图中数据的格式(比如http:或者mailto:)进行匹配。同上,意图的格式必须出现在目标组件的格式列表中。
如果意图指定了一个或多个类别,这些类别必须全部出现在组建的类别列表中。比如意图中包含了两个类别:
LAUNCHER_CATEGORY和ALTERNATIVEC_CATEGORY,解析得到的目标组件必须至少包含这两个类别。
3 系统需求
3.1 用户需求
越来越复杂的医药名称及病情症状使得人们经常非常的苦
上一篇:基于Android的洛阳“本地通”旅游向导平台移动客户端
下一篇:试论APP广告在手机中的应用