这个比较多慢慢写,先去休息累啊,Android开发也要看看
abilities 示例:
“abilities”: {
“name”: “.MainAbility”,
#表示Ability名称。取值可采用反向域名方式表 示,由包名和类名组成,如 com.example.myapplication.MainAbility;也 可采用.开头的类名方式表示,如.MainAbility。 该标签仅适用于手机、平板、智慧屏、车机、 智能穿戴。说明在使用DevEco Studio新建项目 时,默认生成首个Ability的配置,包括生成 MainAbility.java文件,及config.json中 MainAbility的配置。如使用其他IDE工具,可自 定义名称
“description”: “himusic main ability”,##
#表示对Ability的描述。取值可以是描述性内容, 也可以是对描述性内容的资源索引,以支持多 语言。 字符串
“icon”: “$media:ic_launcher”,##这边应该是Launcher icon(启动图标) 应该是打开音乐的启动图标
#表示Ability图标资源文件的索引。取值示例: $media:ability_icon。如果在该Ability的skills属 性中,actions的取值包含 action.system.home,entities取值中包含 entity.system.home,则该Ability的icon将同时 作为应用的icon。如果存在多个符合条件的 Ability,则取位置靠前的Ability的icon作为应用 的icon。说明应用的icon和label是用户可感知 配置项,需要区别于当前所有已有的应用icon或label(至少有一个不同)。
“label”: “HiMusic”,#对用户显示的名称”HiMusic”
#表示Ability对用户显示的名称。取值可以是 Ability名称,也可以是对该名称的资源索引,以 支持多语言。如果在该#Ability的skills属性中, actions的取值包含 action.system.home, entities取值中包含entity.system.home,则该 Ability的label将同时作为应用的label。如果存 在多个符合条件的Ability,则取位置靠前的 Ability的label作为应用的label。说明应用的 icon和label是用户可感知配置项,需要区别于 当前所有已有的应用icon或label(至少有一个 不同)。
“launchType”: “standard”
#启动类型 标准实例
#表示Ability的启动模式,支持standard和 singleton两种模式:(标准实例)standard:表示该Ability 可以有多实例。standard模式适用于大多数应 用场景。(独立实例)singleton:表示该Ability只可以有一 个实例。例如,具有全局唯一性的呼叫来电界 面即采用singleton模式。
“orientation”: “unspecified”,
#orientation(方向) unspecified(未指明)
“permissions”: [ ],##permissions(许可)
“visible”: true,
#表示Ability是否可以被其他应用调用。true:可 以被其他应用调用。false:不能被其他应用调 用。
“skills”: [ {
#表示Ability能够接收的Intent的特征
#Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图),Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。还可以通过intent.putExtra()等方法携带数据。
对于两种intent的方式,有如下的特点和区别:
- 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,去调用Intent.setComponent()\Intent.setClassName()或Intent.setClass()方法 或者在new Intent(A.this,B.class)指明需要转向到的Activity ,显式意图明确指定了要激活的组件是哪个组件,一般是在相同的应用程序内部实现的。
- 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间。
我们在编写需要被隐式调用的界面的清单文件时,会指定一个Intent Filter(意图过滤器),它是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,会有三个方面会被参考到:
- 动作(action)
- 数据(data)
- 类别(catagory)
动作测试(Action test)
一个Intent对象只能指定一个动作名称,而一个filter可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:
- 如果filter没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
- 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试
类别测试(Category test)
对于一个能够通过类别匹配测试的intent,该intent对象中的类别必须匹配filter中的类别。这个filter可以列举另外的类别,但它不能遗漏在这个intent中的任何类别。
原则上一个没有类别的intent对象应该总能够通过匹配测试,而不管filter里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:”android.intent.category.DEFAULT” (CATEGORY_DEFAULT常量)。 因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含”android.intent.category.DEFAULT”。
数据测试(Data test)
当一个intent对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。
关于效率问题
显式意图有点是效率高,系统直接精确定位要启用的组件,但耦合度也高,如果通过这种方式调用一些系统组件的话,容易因为版本更新,类名、包名、包结构变化等原因导致程序崩溃。
而隐式意图能够降低程序的耦合度,但由于每次意图执行的时候,系统都会搜索所有可用的intentfilter,来查看是否有匹配的内容,所以效率更低。所以具体的使用还要看具体的情况。
“actions”: [ “action.system.home” ],
#动态实例
“entities”: [ “entity.system.home” ] } ],
#entities独立实例
“configChanges”: [
#配置更改
“locale”, “layout”,”
AndroidManifest.xml中配置了configChanges locale属性
android:configChanges="locale"
增加了一个layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。
需要在android:configChanges 中同时添加locale和layoutDirection。
#就是在配置文件添加locale”, “layout”,属性
fontSize””orientation” ],
#表示该Ability的显示模式。该标签仅适用于 page类型的Ability。取值范围如下: unspecified:由系统自动判断显示方向。 landscape:横屏模式。portrait:竖屏模式。 followRecent:跟随栈中最近的应用。
“orientation“ 设备旋转,横向显示和竖向显示模式切换。
“fontScale“ 全局字体大小缩放发生改变
“type”: “page” },
{ “name”: “.PlayService”,
#播放服务
“description”: “himusic play ability”,
#描述 播放
“icon”: “$media:ic_launcher”,
“label”: “HiMusic”,
“launchType”: “standard”,
“orientation”: “unspecified”,
“visible”: false,
“skills”: [ {
“actions”: [ “action.play.music”,
“action.stop.music” ],
#开始和暂停播放
“entities”: [ “entity.audio” ] } ],
#音频实例
“type”: “service”,
“backgroundModes”: [ “audioPlayback” ] },
#表示后台服务的类型,可以为一个服务配置多 个后台服务类型。该标签仅适用于service类型 的Ability。取值范围如下:dataTransfer:通过 网络/对端设备进行数据下载、备份、分享、传 输等业务。audioPlayback:音频输出业务。 audioRecording:音频输入业务。 pictureInPicture:画中画、小窗口播放视频业 务。voip:音视频电话、VOIP业务。location: 定位、导航业务。bluetoothInteraction:蓝牙 扫描、连接、传输业务。wifiInteraction: WLAN扫描、连接、传输业务。screenFetch: 录屏、截屏业务。
“name”: “.UserADataAbility”,
“type”: “data”,
“uri”: “dataability://com.huawei.hiworld.himusic.UserADataAbility”,
#反向URI 反向域名
“visible”: true }
#可见