目录
一、AndroidManifest.xml整体结构
<manifest>
<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<supports-screens/>
<compatible-screens/>
<supports-gl-texture/>
<application>
<activity>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data/>
</activity-alias>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data/>
</receiver>
<provider>
<grant-uri-permission/>
<meta-data/>
<path-permission/>
</provider>
<uses-library/>
</application>
</manifest>
二、各个节点详细介绍
1、<manifest>属性
<manifest xmlns:android=http://schemas.android.com/apk/res/android
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto"|"internalOnly"|"preferExternal"]>
...
</manifest>
说明:
这个元素是AndroidManifest.xml文件的根元素。它必须包含一个<application>元素,并且必须要指定xmlns:android和package属性。
属性:
xmlns:android:定义android的命名空间。
package:一个完整的java语言风格的应用程序包的名称,这个必须是唯一的,名字可以包含大小写字母、数字和下划线 ('_'),但只能以字母开头。
android:sharedUserId:这个属性定义了一个Linux 用户ID的名称,这个名称能够跟其他应用程序共享。默认情况下,Android会给它的每个应用程序都分配一个唯一的用户ID。但是,如果有两个或更多的应用程序把这个属性都设置了相同的值,那么它们将共享这个相同的ID---假如并且它们具有相同的数字签名。拥有相同用户ID的应用程序能够访问彼此的数据,并且它们也可运行在相同的进程中。
android:sharedUserLabel:(API Level 3)这个属性给共享的userid定义了一个用户可读的标签。这个标签必须用字符串资源来设置,不能使用原生的字符串。只有在sharedUserId属性被设置,这个属性才有意义。
android:versionCode:apk版本号,值为数字,用于版本判断,对用户不可见。
android:versionName:apk当前版本的名称,对用户可见,由三部分组成:<major>.<minor>.<point>,如:3.4.4。
android:installLocation:(API Level 8)apk安装位置,apk可以安装在内部存储上或外部存储上。
auto | 系统自己判断安装位置,安装位置不定,优先安装在内部存储上,用户可以移动安装位置; |
internalOnly | (默认值)强行安装在内部存储上,当内部存储空间不足时,系统将不会安装该应用。用户不能移动安装位置。 |
preferExternal | 应用程序偏好安装在外部存储器 上(SD卡)。系统并不保证恪守这一个规则。如果外部存储器不可用或空间不足,或者应用程序使用了forward-locking机制(这种机制不支持外 部存储),那么应用程序就可以安装在内部存储器上。一旦安装,用户能够通过系统设置在内外存储器之间移动应用程序。 |
警告:如果应用程序使用的Google Play的复制保护功能,那么它就不能被安装在设备的SD卡上。但是,如果使用Google Play的应用程序许可,那么它就能够被安装在内部或外部存储器上,包括SD卡。
注意:默认情况下,应用程序会被安装在内部存储器上,除非把这个属性值定义为auto或preferExternal,应用程序才能够被安装在外部存储器上。
当应用程序被安装在外部存储器上的时候:
1. .apk文件被保存在外部存储器上,但是任何应用程序数据(如数据库)依然被保存在内部设备存储器上;
2. 用一个key把存储器中保存的.apk文件加密,只允许应用程序在安装它的设备上运行。用户不能把安装在SD卡上应用程序转移到另一个设备的SD卡上,虽然在一个设备上能够使用多个SD卡;
3. 在用户要求的时候,应用程序能够被转移到内部存储器上。用户也可以要求把应用程序从内部存储器移动到外部存储器上。但是,如果这个属性被设置为internalOnly,那么系统不允许用户把应用程序转移到外部存储器上。
2、应用程序运行环境相关
系统版本
<uses-sdk>
<uses-sdk
android:minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer" />
说明:
这个元素用API 的级别(一个整数)来说明应用程序会跟哪些Android平台版本兼容。由应用程序给出的API级别会跟给定不同的设备中的Android系统的API级别比较。
属性:
android:minSdkVersion:程序运行的最小API版本,如果Android系统的API级别比该应用程序清单中的这个属性值小,那么系统就阻止安装该应用程序。如果不指定该属性,默认最小API版本为1,即兼容所有版本。
android:targetSdkVersion:(APILevel 4)程序的目标版本,即应用测试时所针对的目标平台版本。当程序运行在比该版本高的平台上时,系统将以兼容模式来运行程序以确保程序能够正常运行。不指定该属性时,该值与minSdkVersion相同。
android:maxSdkVersion:(API Level 4)不建议设定该值,指定程序能运行的最高版本,当当前系统版本比该值高时,该程序将不能安装,如果系统升级后的版本号高于该值时,该程序将被删除。从Android 2.0.1以后系统在安装程序或系统升级的时候将不再检测和使用该属性。但Google Play在把应用程序展示给用户下载的时候,会继续使用这个属性作为过滤条件。
系统软硬件环境
<uses-feature>
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" />
被包含于:
说明:
(API Level 4)声明该程序需要的硬件或软件环境,AndroidMarket会根据uses-feature过滤所有你设备不支持的应用。android系统本身不会检测该属性。建议minSdkVersion小于4的时候也设置该属性。可包含多个该节点。
android:name:指定一个硬件或软件环境
硬件环境:
硬件类型 | 名称 | 描述 | |
Audio | android.hardware.audio.low_latency | 应用程序使用设备上的低延迟的音频通道,并且对于输入或的延迟或之后是敏感的 | |
Bluetooth | android.hardware.bluetooth | 蓝牙设备 | |
Camera |
| 摄像头,如果有多个摄像头,应用程序使用后置摄像头 | |
android.hardware.camera.autofocus | 自动对焦 | ||
android.hardware.camera.flash | 闪光灯 | ||
android.hardware.camera.front | 前置摄像头 | ||
android.hardware.camera.any | 至少一个摄像头,优先后置摄像头 | ||
Location | android.hardware.location | 应用程序会使用设备上的多种功能来判断位置,如GPS位置、网络位置、或蜂窝位置 | |
android.hardware.location.network | 子功能,应用程序要从设备上所支持的基于网络的定位系统来获取大概的位置坐标 | ||
android.hardware.location.gps | 应用程序使用了从设备上的全球定位系统接收器中获取精确的坐标 | ||
Microphone | android.hardware.microphone | 麦克风 | |
NFC | android.hardware.nfc | 近距离无线通讯技术 | |
Sensors | android.hardware.sensor.accelerometer | 加速传感器 | |
android.hardware.sensor.barometer | 压力传感器 | ||
android.hardware.sensor.compass | 应用程序要使用设备上的罗盘来读取方向读数。) | ||
android.hardware.sensor.gyroscope | 应用程序要使用设备上的陀螺仪 | ||
android.hardware.sensor.light | 应用程序要使用设备的亮度传感器 | ||
android.hardware.sensor.proximity | 近距离传感器 | ||
Screen | android.hardware.screen.landscape | 应用程序需要横向屏幕 | |
android.hardware.screen.portrait | 应用程序需要纵向屏幕 | ||
Telephony | 应用程序要使用设备上的电话功能,如带有数据通信服务的无线电话 | ||
android.hardware.telephony.cdma | 应用程序要使用设备上的CDMA无线电话功能 | ||
android.hardware.telephony.gsm | 应用程序要使用设备上的GSM无线电话功能 | ||
Touchscreen | android.hardware.faketouch | 应用程序要使用基本的触屏事件,如“click down”、“click up”和“drag” | |
android.hardware.faketouch.multitouch.distinct | 应用程序要在fake touch(假触屏)表面上执行区分两点以上触摸的轨迹的操作,这是fake touce功能的一个超集。 | ||
android.hardware.faketouch.multitouch.jazzhand | 应用程序要在fake touch(假触屏)表面上执行区分五点以上触摸的轨迹的操作,这是fake touce功能的一个超集。 | ||
android.hardware.touchscreen | 应用程序要使用比基本的触屏事件还要多的手势交互功能,如,抛物手势。该功能是基本faketouch功能的一个超集。 | ||
android.hardware.touchscreen.multitouch | 应用程序要使用多点触屏上的基本双点触摸功能,如掐捏手势,但不需要独立的轨迹跟踪。该功能是touchscreen功能的一个超集。 | ||
android.hardware.touchscreen.multitouch.distinct | 应用程序要使用多点触屏设备的高级多点触摸功能,如两个以上完全独立的点的轨迹跟踪。它是multitouch功能的子集 | ||
android.hardware.touchscreen.multitouch.jazzhand | 该应用程序要使用多点触屏设备的多点触摸功能,如五个以上完全独立的点的轨迹跟踪。它是multitouch功能的子集 | ||
USB | android.hardware.usb.host | 应用程序要使用USB主机模式功能(应用程序以主机的方式连接到USB设备上 | |
android.hardware.usb.accessory | 应用程序要使用访问USB的功能(应用程序以USB设备的方式连接到USB主机上) | ||
Wifi | android.hardware.wifi | 应用程序要使用设备上的802.11网络(wifi)功能 |
软件环境:
软件类型 | 名称 | 描述 |
Live Wallpaper | android.software.live_wallpaper | 应用程序需要活动壁纸功能 |
SIP/VOIP | android.software.sip | 应用程序使用SIP服务设备 |
android.software.sip.voip | 应用程序使用基于sip的网络电话服务设备,子功能 |
android:required:当设置上没有指定功能是,程序是否能正常运行,true:不能正常运行,false:能正常运行,默认值为true。
android:glEsVersion:声明应用程序所需要的OpenGL ES的版本,它的高16位代表主版本号,低16位代表次要版本号,如:要是指定OpenGL ES的版本号是2.0,那么就要设置为0x00020000。要指定的OpenGL ES的版本号是2.1,就要设置为0x00020001。应用程序在它的清单中应该最多只能指定一个android:glEsVersion属性,如果指定了多个,那么只会使用版本最高的那个android:glEsVersion属性,而其他的将会被忽略。如果应用程序没有指定一个android:glEsVersion属性,那么就假定应用程序仅需要OpenGLES1.0,它是在所有的Android设备上都支持的版本。
<uses-configuration>
<uses-configuration
android:reqFiveWayNav=["true" | "false"]
android:reqHardKeyboard=["true" | "false"]
android:reqKeyboardType=["undefined"|"nokeys"|"qwerty"|"twelvekey"]
android:reqNavigation=["undefined"|"nonav"|"dpad"|"trackball"|"wheel"]
android:reqTouchScreen=["undefined"|"notouch"|"stylus"|"finger"]/>
被包含于:
说明:
(API Level 3)这个属性用于指定该应用程序所需要的硬件和软件功能。例如,应用程序可以用这个元素指定它所需要的物理键盘或特殊的导航设备,如轨迹球。使用这个规范可以避免把应用程序安装在那些不支持其不能工作的设备上。可包含多个该节点。
属性:
android:reqFiveWayNav:是否需要5位导航键。
android:reqHardKeyboard:是否需要物理键盘。
android:reqKeyboardType:键盘类型,此处不区分物理键盘和软键盘。
undefined | 应用程序不需要键盘,默认值 |
nokeys | 应用程序不需要键盘 |
qwerty | 应用程序需要一个标准的QWERTY键盘 |
twelvekey | 应用程序需要一个12键键盘,类似于大多数手机——键从0到9的数字加上星号(*)和英镑(#)键。 |
android:reqNavigation:导航控制。
undefined | 应用程序不需要任何导航控制,默认值 |
nonav | 应用程序不需要任何导航控制 |
dpad | 应用程序需要一个方向键(方向键)进行导航 |
trackball | 应用程序需要导航球 |
wheel | 应用程序需要一个导航轮 |
注意:如果一个应用程序需要一个导航制,但具体类型的控制并不重要,可以将 reqFiveWayNav设置为true,而不用设置该属性。
android:reqTouchScreen:触摸屏类型。
undefined | 应用程序不需要触摸屏,默认值 |
notouch | 应用程序不需要触摸屏 |
stylus | 应用程序需要一个使用触摸笔的触摸屏 |
finger | 应用程序需要一个使用手指的触摸屏 |
3、屏幕尺寸相关
<supports-screens>
<supports-screens
android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
被包含于:
说明:
(API Level 4)这个元素用于指定应用程序所支持的屏幕尺寸,当比支持的屏幕还要大屏幕时将启用屏幕兼容模式。在应用程序中使用这个元素指定应用程序所支持的屏幕尺寸是至关重要的。
属性:
android:resizeable:针对不同的屏幕尺寸,应用程序是否可以调整尺寸。默认值是true。如果这个属性设置了false,在大的屏幕上,系统会以屏幕兼容模式运行该应用程序。
这个属性被废弃了,引入这个属性主要是为了帮助应用程序从1.5过渡到1.6。当多屏幕支持被引入时,就不应该在使用它了。
android:smallScreens:这个属性用于指定应用程序是否支持较小外形的屏幕。一个small类型的屏幕被定义成一个比normal(传统的HVGA)类型的屏幕还要小的屏幕。外部服务(如Google Play)不会把不支持小屏的应用程序提供给小屏设备,因为很少有能够确保该应用程序在小屏幕的设备上正常工作的平台。默认为true。
android:normalScreens:是否支持普通屏幕,典型的是HVGA中等密度的屏幕,但是WQVGA低密度和WVGA高密度屏幕也被认为是普通屏幕。默认为true。
android:largeScreens:这个属性用于指示应用程序是否支持较大外形的屏幕。一个large类型的屏幕被定义成一个比normal类型的手持设备的屏幕明显还要大的屏幕,并且为了让应用程序能够良好的使用,使用这个属性时要特别小心,尽管可以依赖系统来调整尺寸,以便能够填充屏幕。
这个属性的默认值实际上在某些版本之间是不同的,因此最好在任何时候都明确的声明这个属性。如果设置为false,系统会启用屏幕兼容模式,这时要格外的小心。
android:xlargeScreens:(API Level 9)这个属性用于指示应用程序是否支持超大外形的屏幕。一个xlarge屏幕被定义成一个比large屏幕还要大的屏幕,如平板电脑,为了能够让应用程序良好的使用,需要特别小心的使用这个属性,尽管可以依赖系统来UI的尺寸来填充屏幕。
android:anyDensity:应用程序是否有资源来适应所有密度的屏幕,APILevel 4以上的程序的默认值为true。
android:requiresSmallestWidthDp:(API level 13)屏幕宽度的最小尺寸(dp)(屏幕的两个维度的尺寸中最短的那个)。
注意:Android系统不会关注这个属性,因此它不会影响应用程序在运行时的行为。相反,它被服务(如Google Play)用于过滤应用程序。但是,当前Google Play不支持用这个属性来过滤(在Android3.2上),因此如果应用程序不支持小屏幕设备,就应该继续使用其他的尺寸属性。
android:compatibleWidthLimitDp:(API level 13)这个属性允许在设计应用程序 时,通过指定最大的“smallest screenwidth”来启用屏幕兼容模式,作为一个用户可选的功能。如果设备的有效屏幕的最小边比这个属性值大,那么用户依然能够安装该应用程序,但是在运行时要使用屏幕兼容模式。默认情况下,屏幕兼容模式似乎被禁止的,并且通过会调整布局的尺寸来填充屏幕,但是在系统栏中会有一个按钮,让用户选择屏幕兼容模式的 打开和关闭。
注意:当前,屏幕兼容模式只能模拟320dp宽度的手持设备屏幕,因此如果android:compatibleWidthLimitDp的值比320大,那么屏幕兼容模式就不被适用。
android:largestWidthLimitDp:(API level 13)这个属性允许在设计应用程序时,通过指定最大的“smallest screenwidth”来强制启用屏幕兼容模式。如果设备有效屏幕的最小边比这个属性值大,应用程序就会运行在屏幕兼容模式中,而用户没有办法禁止这种模式。只有在因大屏幕尺寸调整而导致破坏了应用程序的功能的时候,并且使用屏幕兼容模式是唯一的方法的时候,才应该使用这个属性。
注意:当前,屏幕兼容模式只能模拟320dp宽度的手持设备屏幕,因此如果android:compatibleWidthLimitDp的值比320大,那么屏幕兼容模式就不被适用。
<compatible-screens>
android:screenSize=["small"|"normal"|"large"|"xlarge"]
android:screenDensity=["ldpi"|"mdpi"|"hdpi"|"xhdpi"]/>
...
</compatible-screens>
被包含于:
说明:
(API Level 9)至少包含一个screen标签,每个screen标签包含android:screenSize和android:screenDensity 这两个属性,当不指定这两个属性时该标签将被忽略。
系统不会检测该属性,用于google Play。
警告:通常不应该使用这个清单元素。因为使用这个元素会显著的降低应用程序潜在的用户群。如果设备带有一个应用程序清单中没有列出屏幕配置,那么就不会允许用户安装这个应用程序。在肯定应用程序在所有的屏幕配置上都不会工作时,最后才使用这个方法。
属性:
android:screenSize:指定一个要配置的屏幕,small、normal、large、xlarge。
android:screenDensity:指定这个屏幕的密度。ldpi、mdpi、hdpi、xhdpi。
4、权限相关
<uses-permission>
<uses-permission android:name="string" />
被包含于:
说明:
这个属性用于给应用程序授予正确的操作的所必须的权限。这些权限是在应用程序安装时被授予的,而不是在运行时授予的。
属性:
android:name:权限名称。
<permission>
<permission
android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal"|"dangerous"|"signature"|"signatureOrSystem"]/>
被包含于:
说明:
这个元素用于声明一个安全权限,以便限制对具体的组件、或组件功能、或其他的应用的访问。
属性:
android:description:这个属性用于给权限定义一个用户可读的懂的描述,它要比标签更长更详细。它可以显示给用户,以便向用户解释权限的含义---例如,当询问用户是否要给另一个应用程序授予对应的权限的时候,就会把这个属性所定义的说明显示给用户。
android:icon:权限icon,必须引用一个可绘制的图标资源。
android:label:定义一个能够显示给用户的权限名称。
android:name:权限的名称,它是在程序代码中引用的权限的名称。例如,在一个<uses-permission>元素中和应用程序组件中的permission属性。这个名称必须是唯一的。
android:permissionGroup:该权限所属的权限组,它必须是在本应用程序或另一个应用中用<permission-group>元素声明的权限组。如果这个属性没有被设置,那么这个权限不属于任何权限分组。
android:protectionLevel:定义权限级别。
normal | 默认值。这是让请求的应用程序访问独立的应用程序级功能的一个较低风险的权限,它会给另一个应用程序、系统、或用户带来最小化的风险。系统在安装应用程序时会自动的把这种类型的权限授予请求的应用程序,而不需要用户明确的批准(虽然在安装应用程序之前,用户始终可以有选择的查看这些权限); |
dangerous | 这个是一个较高风险的授权,它会让请求该权限的应用程序访问私有的用户数据,或者控制用户设备,从而给用户带来负面影响。因为这种权限会引入潜在的风险,因此系统不会自动把这种权限授予请求这个权限的应用程序。例如,应用程序所请求的这些dangerous类型的权限,在确认处理之前,可以显示给用户,或者采用一些其他的方法,以避免用户自动把权限授予所请求的应用程序。 |
signature | 系统只会把这种权限授予具有相同数字签名的应用程序,也就是说,请求该权限的应用程序要与声明该权限的应用程序具有相同的数字签名。如果证书匹配,系统就会自动的把该权限请求权限的应用程序,而不会通知用户,也不会要求用户明确的批准; |
signatureOrSystem | 系统只会把这种权限授予Android系统镜像中应用程序,或者是那些与系统镜像中具有相同证书签名的应用程序。请避免使用这个选项,因为signature类型的权限应该足以满足大多数工作的需要。SingatureOrSystem权限主要用于某些特定的场景,如:多个厂商有一些要构建在系统镜像中的应用程序,并且它们共享一些明确的特殊功能。 |
<permission-group>
<permission-group
android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string" />
被包含于:
说明:
给相关的权限声明一个逻辑上的分组名称。独立的权限要通过<permission>元素的permissionGroup属性来加入权限分组。同一分组的中成员会一起展现在用户的界面中。
要注意的是这个元素本身并不能声明权限,它只是放置相关权限的一个分类。
属性:
android:description:这个属性用于给权限组定义一个用户可读的说明性文本。这个文本应该比标签更长、更详细。这个属性必须要引用一个字符串资源,跟label属性不一样,它不能够使用原生的字符串。
android:icon:属性定义了一个代表权限的图标。这个属性要使用包含图片定义的可绘制资源来定义。
android:label:这个属性给权限组定义了一个用户可读的名称。
android:name:定义了权限组的名称。
<permission-tree>
<permission-tree
android:icon="drawable resource"
android:label="string resource" ]
android:name="string" />
被包含于:
说明:
这个元素用于声明权限树的根节点名称,应用程序持有树中定义的所有权限名称所对应的权限。通过调用PackageManager.addPermission()方法能够动态的来添加新的权限。树中的名称是通过”.”来分离的。例如:如果跟节点的名称是com.example.project.taxes,那么可以使用下面的格式来添加权限:
com.example.project.taxes.CALCULATE
com.example.project.taxes.deductions.MAKE_SOME_UP
com.example.project.taxes.deductions.EXAGGERATE
要注意的是,这个元素本身并不声明权限,它只是一个能够放置更多权限的命名空间 。
属性:
android:icon:属性定义了一个代表数中所有权限的图标。这个属性要使用包含图片定义的可绘制资源来定义。
android:label:给权限树定义一个用户可读的名称。
android:name:这个属性定义了权限树根节点的名称,在命名中必须要有两个以上的”.”来进行分离。这个名称必须是唯一的。
5、测试标签属性
<instrumentation>
<instrumentation
android:functionalTest=["true" | "false"]
android:handleProfiling=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:targetPackage="string" />
被包含于:
说明:
测试工程的属性,该元素声明一个测试类,用于测试指定的应用程序。该测试类的对象会在应用的其他所有组件被实例化之前实例化。
属性:
android:functionalTest:(测试功能开关)这个属性用于指定Instrumentation类是否应该作为一个功能性的测试来运行。如果设置为true,这要运行,否则不应该运行。默认值是false。
android:handleProfiling:(调试功能开关)这个属性用于指定Instrumentation对象是否会开启和关闭分析功能。如果设置为true,那么由Instrumentation对象来决定分析功能的启动和终止时机,如果设置为false,则分析功能会持续到Instrumentation对象整个运行周期。如果设置为true,会使Instrumentation对象针对一组特定的操作来进行分析。默认值是false。
android:icon:测试类图标
android:label:定义一个用户可读的名称。
android:name:测试类的名称
android:targetPackage:指定要测试的应用程序
6、系统标签
这几个标签第三方app是不能使用的,只有系统app才能使用。
<protected-broadcast>
<protected-broadcast android:name="action string" />
被包含于:
说明:
此处指定一个广播,该广播只能被系统发送。
注意:只有系统appliaction才能在其AndroidManifest.xml中定义Protected Broadcast,系统appliaction包括/system/framework、/system/app、vendor/app下的package,因此设备中安装的第三方apk中如果定义了Protected Broadcast,那么这个Protected Broadcast将不生效。
<package-verifier>
<package-verifier />
被包含于:
说明:
待补充…
<original-package>
<original-package />
被包含于:
说明:
待补充…
7、<application>属性
<application
android:allowTaskReparenting=["true" | "false"]
android:backupAgent="string"
android:debuggable=["true" | "false"]
android:description="string resource"
android:enabled=["true" | "false"]
android:hasCode=["true" | "false"]
android:hardwareAccelerated=["true" | "false"]
android:icon="drawable resource"
android:killAfterRestore=["true" | "false"]
android:largeHeap=["true" | "false"]
android:label="string resource"
android:logo="drawable resource"
android:manageSpaceActivity="string"
android:name="string"
android:permission="string"
android:persistent=["true" | "false"]
android:process="string"
android:restoreAnyVersion=["true" | "false"]
android:supportsRtl=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme"
android:uiOptions=["none" |"splitActionBarWhenNarrow"] >
.. .
</application>
被包含于:
包含:
说明:
这个元素用于应用程序的声明。它包含了每个应用程序组件所声明的子元素,并且还有能够影响所有组件的属性。其中的很多属性(如icon、label、permission、 process、taskAffinity和allowTaskReparenting)会给组件元素中对应的属性设置默认值。其他的给是应用程序整体设置的值(如debuggable、enabled、description、allowClearUserData),并且这些属性值不能被组件的属性所 覆盖。
属性:
Android:allowTaskReparenting:当一个与当前任务有亲缘关系的任务(也就是android:taskAffinity指定的task)被带到前台时,用这个属性来指定应用程序中定义的Activity能否从他们当前的任务中转移到这个有亲缘关系的任务中。如果设置为true,则能够转移,如果设置为false,则应用程序中的Activity必须保留在它们所在的任务中。默认值是false。
android:taskAffinity:这个属性给应用的所有的Activity设置了一个亲缘关系名,除了那些用它们自己的taskAffinity属性设置不同亲缘关系的组件。默认情况下,应用程序中的所有Activity都会共享相同的亲缘关系,亲缘关系的名称跟<manifest>元素设置的包名相同。
经典理解:就是说,一个activity1原来属于task1,但是如果task2启动起来的话,activity1可能不再属于task1了,转而投奔task2去了。
注意:以上两个属性一般一起使用,它们可以在application中设置(这样对所有的activity有效),也可以对单个的activity进行设置。
android:backupAgent:这个属性用于定义应用程序备份代理的实现类的名称,这个类是BackupAgent类的一个子类。
说明:为了备份应用程序数据,需要实现一个备份代理。此备份代理将被备份管理器调用,用于提供所需备份的数据。当程序重装时,还要调用此代理来恢复数据。备份管理器处理所有与云存储之间的数据传输工作(利用备份传输器),备份代理则负责所有对设备上数据的处理。
关于应用程序数据备份详情见:http://www.cnblogs.com/over140/archive/2011/12/11/2284217.html
android:restoreAnyVersion:这个属性用布尔值标明恢复数据时是否忽略当前程序和产生备份数据的程序之间的版本差异(默认值是“false”)。
注意:备份服务和API只在运行API Level 8(Android 2.2)以上版本的设备上才可用。
android:debuggable:这个属性用于指定应用程序是否能够被调试,即使是以用户模式运行在设备上的时候。如果设置为true,则能够被调试,否则不能调试,默认值是false。
android:description:这个属性用于定义应用程序相关的用户可读文本,它要比应用程序标签更长、更详细。它的值必须被设置成一个字符串资源的引用。跟label属性不一样,label属性可以使用原生的字符串。这个属性没有默认值。
android:enabled:这个属性用于指定Android系统能否实例化应用程序组件。如果设置为true,这个可以实例化其组件,否则不能够实例化。如果这个属性被设置为true,那么就会使用每个组件自己enabled属性的设置来判断其是否能够被实例化。如果这个属性被设置为false,它会覆盖其所有组件自己指定的值,应用程序中的所有组件都会被禁用。默认值是true。
android:hasCode:这个属性用于设置应用程序是否包含了代码,如果设置为true,则包含代码,否则不包含任何代码。在这个属性被设置为false的时候,系统在加载组件的时候不会试图加载任何应用程序的代码。默认值是true。
android:hardwareAccelerated:这个属性用于设置能够给应用程序中的所有Activity和View对象启用硬件加速渲染。如果设置为true,则应该启用,如果设置为false,则不会启用。默认值是false。从Android3.0开始,应用程序可以使用硬件加速的OpenGL渲染器,来改善很多共同的2D图形操作的性能。当硬件加速渲染被启动的时候,在Canvas、Paint、Xfermode、ColorFilter、Shader和Camera中的大多数操作都会被加速。这样会使动画、滚动更加平滑,并且会改善整体的响应效果,即使应用程序没有明确的使用框架的OpenGL类库。要注意的是,不是所有的OpenGL 2D操作都会被加速。如果启用了硬件加速渲染器,就要对应用程序进行测试,以确保使用渲染器时不发生错误。
android:icon:这个属性用于设置应用程序的整个图标,以及每个应用组件的默认图标。对于<activity>、<activity-alias>、<service>、<service>、<receiver>和<provider>元素,请看它们各自的icon属性。设置这个属性时,必须要引用一个包含图片的可绘制资源(例如,“@drawable/icon”)。没有默认的图标。
android:killAfterRestore:这个属性是指当系统在恢复出厂设置期间,应用的设置被恢复以后,是否终止应用程序。第三方应用程序通常不需要使用这个属性。默认值是true,这意味着在恢复出厂设置期间,应用程序完成数据处理之后,会被终止。
android:label:这个属性用于设置应用程序整体的用户可读的标签,并也是每个应用程序组件的默认标签。对于<activity>、<activity-alias>、<service>、<receiver>和<provider>元素,请看它们各自的label属性。
android:logo:这个属性用于给整个应用程序设置一个Logo,而且它也是所有Activity的默认Logo。设置这个属性时,必须要引用一个包含图片的可绘制资源(如:“@drawable/logo”)。没有默认的Logo。
android:manageSpaceActivity:指定一个进行数据清理的activity。默认情况如左图,当点击“清理数据”时系统会进行默认的数据清理工作。当设置了该属性后,此处就变成了右侧的“管理空间”,当点击“管理空间”时会打开在该属性中指定的activity,自定义清理工作,如保留我们不想被清理的数据。
android:name:给应用程序定义一个Application子类的实现。当应用程序进程被启动时,这个类在其他任何应用程序组件被实例化之前实例化。
android:permission:设置权限,这个属性若在<application>上定义的话,是一个给应用程序的所有组件设置权限的便捷方式,当然它是可以被各组件设置的权限名所覆盖的。
android:persistent:这个属性用户设置应用程序是否应该时刻保持运行状态,如果设置为true,那么就保持,否则不保持。默认值是false。普通的应用程序不应该设置这个属性,持久运行模式仅用于某些系统级的应用程序。
android:process:这个属性用于定义一个进程名称,应用程序的所有组件都应该运行在这个进程中。每个组件都能够用它自己process属性的设置来覆盖这个<application>元素中的设置。默认情况下,当应用程序的第一个组件需要运行时,Android系统就会给这个应用程序创建一个进程。然后,应用中的所有组件都运行在这个进程中。默认的进程名是跟<manifest>元素中设置的包名进行匹配的。通过设置这个属性,能够跟另外一个应用程序共享一个进程名,能够把这两个应用程序中的组件都安排到同一个进程中运行---但是仅限于这两个应用程序共享一个用户ID,并且带有相同的数字证书。
如果这个进程名称用“:”开头,那么在需要的时候,就会给应用程序创建一个新的、私有的进程。如果进程名用小写字符开头,就会用这个名字创建一个全局的进程,这个全局的进程能够被其他应用程序共享,从而减少资源的使用。
android:theme:这个属性给应用程序中所有的Activity设置默认的主题,属性值要引用一个样式资源。每个独立的Activity的主题会被它们自己的theme属性所覆盖。
android:uiOptions:这个属性设置了Activity的UI的额外选项。
none | 默认设置,没有额外的UI选项 |
splitActionBarWhenNarrow | 在水平空间受到限制的时候,会在屏幕的底部添加一个用于显示ActionBar中操作项的栏,例如:在纵向的手持设备上。而不是在屏幕顶部的操作栏中显示少量的操作项。它会把操作栏分成上下两部分,顶部用于导航选择,底部用于操作项目。这样就会确保可用的合理空间不仅只是针对操作项目,而且还会在顶部给导航和标题留有空间。菜单项目不能被分开到两个栏中,它们要显示在一起。 |
<activity>
<activity
android:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:clearTaskOnLaunch=["true" | "false"]
android:configChanges=["mcc", "mnc", "locale", "touchscreen",
"keyboard", "keyboardHidden", "navigation", "uiMode",
"screenLayout", "fontScale", "orientation", "screenSize",
"smallestScreenSize"]
android:enabled=["true" | "false"]
android:excludeFromRecents=["true" | "false"]
android:exported=["true" | "false"]
android:finishOnTaskLaunch=["true" | "false"]
android:hardwareAccelerated=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]
android:multiprocess=["true" | "false"]
android:name="string"
android:noHistory=["true" | "false"]
android:parentActivityName="string"
android:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" | "reverseLandscape" |
"reversePortrait" | "sensorLandscape" |
"sensorPortrait" |"sensor" | "fullSensor" | "nosensor"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme"
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden", "stateVisible",
"stateAlwaysHidden", "stateAlwaysVisible",
"adjustUnspecified","adjustResize", "adjustPan"] >
. . .
</activity>
被包含于:
包含:
说明:
这个元素声明了一个Activity(或Activity的子类),Activity实现了应用程序的可视化用户界面部分。应用程序中所有的Activity都必须在清单文件中用<activity>元素来声明,没有在清单文件中声明的Activity,系统不会看到,也不会运行它。
属性:
android:allowTaskReparenting:这个属性用于设定Activity能够从启动它的任务中转移到另一个与启动它的任务有亲缘关系(taskAffinity属性定义的)的任务中,转移时机是在这个有亲缘关系的任务被带到前台的时候。如果设置了true,则能够转移,如果设置了false,则这个Activity必须要保留在启动它的那个任务中。如果这个属性没有设置,那么其对应的<application>元素的allowTaskReparenting属性值就会应用到这个Activity上。默认值是false。
android:taskAffinity:这个属性用于指定跟Activity有亲缘关系的task。带有相同亲缘关系的Activity在概念上是属于相同task的(从用户的角度看,它们是属于同一应用程序的)。任务的亲缘关系是通过它的根节点的Activity的亲缘关系来判定的。
亲缘关系决定了两件事情:
1. Activity能否重新设定父task(看allowTaskReparenting属性);
2. 这个task能否包含用FLAG_ACTIVITY_NEW_TASK标记启动的Activity。
默认情况下,在一个应用程序中的所有Activity都有相同的亲缘关系。能够通过设置这个属性把Activity分到不同的组中。甚至能够把定义在不同应用程序中的Activity放到同一个任务中。要指定一个跟任何任务没有亲缘关系的Activity,就要把这个属性设置为空字符串。如果这个属性没有设置,那么这个Activity会继承应用程序的亲缘关系(看<application>元素的taskAffinity属性)。应用程序默认的亲缘关系名称是由<manifest>元素的package属性设定包名。
android:alwaysRetainTaskState:
这个属性用来标记应用的task是否保持原来的状态,“true”表示总是保持,“false”表示不能够保证,默认为“false”。此属性只对task的根Activity起作用,其他的Activity都会被忽略。默认情况下,如果一个应用在后台呆的太久例如30分钟,用户从主选单再次选择该应用时,系统就会对该应用的task进行清理,除了根Activity,其他Activity都会被清除出栈,但是如果在根Activity中设置了此属性之后,用户再次启动应用时,仍然可以看到上一次操作的界面。这个属性对于一些应用非常有用,例如Browser应用程序,有很多状态,比如打开很多的tab,用户不想丢失这些状态,使用这个属性就极为恰当。
android:configChanges:
默认情况下,当activity在运行的时候,如果某些配置发生变化时,activity会关闭并重启。当设置了该属性后,activity不会再重启,而是调用onConfigurationChanged()方法。
" | IMSI移动国家编码改变-----SIM卡被侦测到了,并且更新了mcc (mcc是移动用户所属国家代号) |
"mnc" | IMSI移动网络编码改变------ SIM卡被侦测到了,并且更新了mnc ,MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网 |
"locale" | 语言环境已经改变了-----用户选择了一个种用于显示文本的新语言 |
"touchscreen" | 触摸屏改变了------通常是不会发生 |
"keyboard" | 键盘发生了改变----例如用户插一个外部键盘 |
"keyboardHidden" | 键盘的可用性发生了改变----例如用启用了硬件键盘 |
"navigation" | 导航类型(轨迹球/ dpad)已经改变了-----通常也不会发生 |
"screenLayout" | 屏幕的显示发生了变化------不同的显示被激活 |
"fontScale" | 字体比例发生了变化----选择了不同的全局字体 |
"uiMode" | (API level 8)用户界面发生变化时,要进行自我处理。在把设备放入桌面/轿车内或夜间模式变化时,会导致这种情况发生。 |
"orientation" | 屏幕方向改变了---用户旋转设备,如果API level大于等于13时(minSdkVersion and targetSdkVersion指定的值),还应该加上" |
" | (API level 13)屏幕大小改变了 |
"smallestScreenSize" | (API level 13)物理尺寸发生变化时,要进行自我处理。这种变化不关注屏幕方向的变化,只在实际的物理屏幕尺寸发生变化时才会发生,如切换到另一个显示器上的时候。这个变化对应smallestWidth属性的配置来进行改变。如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。 |
" | (API level 17)布局方向已经改变了。例如从左到右变成了从右到左 |
android:enabled
:当前activity是否能被系统实例化。True:能,默认值,false:不能。只有当该属性和application的这个属性同时为true时(默认值)activity才能实例化。
android:excludeFromRecents
:由该Activity所启动的任务是否出现在最近使用的列表中,也就是说,当这个Activity是一个新任务的根节点时,这个属性决定了这个任务是否要显示在用户最近使用的应用程序列表中。true:不出现在最近使用的列表中。默认false。
android:exported
:这个属性用于设置该Activity能否由另一个应用程序的组件来启动,true:能被调用,false:不能,
只能由app内部调用。
ps
:该属性的默认值取决于
intent过滤器,没有过滤器时,只能由app内部调用,即默认值为false。当至少有一个过滤器时默认值就为true。该属性还可以和android:permission一起决定其他app是否可以调用该activity。
android:finishOnTaskLaunch
:每次启动程序时,如果当前task中存在该activity时是否清除。True:清除,false不清除,默认值为false,该属性只能对非根activity有效,根activity将被忽略。
如果同时还设置了android:allowTaskReparenting=
“true”属性,则activity的
affinity属性会被忽略掉,即activity依然会被销毁。
android:clearTaskOnLaunch
:每次启动程序的时候是否清除当前task中除根activity外的其他所有activity。True:清除,false:不清除。默认false。该属性只对根activity有效,其他activity将被忽略。当为false时也不是就一定不会被清除,这与其他属性有关,如alwaysRetainTaskState属性。
ps:finishOnTaskLaunch
是针对非根activity,clearTaskOnLaunch是针对根activity的。
android:hardwareAccelerated
:这个属性用于设置该Activity是否应该启用硬件加速渲染。如果设置为true,则启用硬件加速,否则不启用。默认设置是false。
从Android3.0开始,硬件加速的OpenGL渲染器对应用程序可用,以便改善许多共同的2D图形操作的性能。当硬件加速渲染器被启用时,在Canva、Paint、Xfermode、ColorFilter、Shader和Camera中大多数操作都会被加速。这样会使动画、滚动更平滑,并改善整体的响应效果,即使应用程序没有明确要使用框架的OpenGL类库。因为启用硬件加速会增加系统的资源需求,所以应用程序会占用更多的内存。
ps
:不是所有的OpenGL 2D操作都会被加速。如果启用了硬件加速渲染,就要对应用程序进行充分测试,以确保所使用的渲染没有错误。
android:icon
:这属性定义了代表Activity的一个图标。当Activity被要求显示到屏幕上时,这个图标会被显示给用户。
android:label
:这个属性给Activity设置了一个可读的标签。当Activity要展现给用户的时候,这个标签会显示在屏幕上,它经常会跟Activity的图标一起来显示,
如果这个属性没有被设置,就会使用给应用程序设置的标签来代替。
android:launchMode
:指示activity如何启动,与Intent对象中的Activity Flags(FLAG_ACTIVITY_*)
共同作用,来决定Activity如何启动来处理Intent。分为两类,如表:
"standard" | Activity可以实例化多次。默认模式。 |
"singleTop" | Activity可以实例化多次。如果目标Task已经有一个实例并且位于该stack的顶部,那么,这个实例就会接收到这个新的Intent(调用onNewIntent());不会创建新的实例。 |
"singleTask" | Activity可以实例化一次, 但是,如果这个Activity的实例已经存在,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。它位于Activity stack的底部,允许其它Activity成为它的Task的部分。 |
"singleInstance" | 除了系统不能把其他的Activity加载到该Activity实例所归属的任务中之外,其他与singleTask模式相同。如果它启动其它的Activity,这个Activity会被放置到另一个task中——好像Intent中包含了FLAG_ACTIVITY_NEW_TASK标志。 |
更多请看Tasks and Back Stack。
android:multiprocess
:默认情况下activity的实例都是运行在当前程序所在的进程中,当该值设置为true时,允许系统在使用它们的进程中来创建实例(权限许可的情况下)。
android:name
:这个属性用于设置Activity的实现类(Activity的子类)的名字。
android:noHistory
:(
API Level 3)
当用户从Activity上离开并且它在屏幕上不再可见时Activity是否从Activity stack中清除并结束(调用finish()方法)。“true”:表示它应该关闭,“false”:表示不需要。默认值是“false”。“true”值意味着Activity不会留下历史痕迹。因为它不会在Activity stack的Task中保留,因此,用户不能返回它。
android:parentActivityName
:(
API Level 16)指定当用户点击
actionbar中的up button时系统要启动的activity。
android:permission
:调用该activity需要的权限。
android:process
:指定activity运行的进程名,默认情况下,程序的所有组件都运行在创建程序的默认的进程中,进程名和包名一致。<application>元素的process属性能够给所有的组件设置一个不同的默认值。但是每个组件都能够覆盖这个默认设置,允许把应用程序分离到多个进程中。
如果这个属性名的值是用“:”开始,那么在需要的时候,就会创建一个应用程序私有的新的进程,这个Activity就会运行在这个进程中。如果进程名使用小写字母开头,那么在权限许可的情况下,该Activity会运行在用它命名的全局进程中。这样就运行不同应用程序的组件能够共享一个进程,从而减少资源的使用
。
android:screenOrientation
:指定activity的显示方向。
" |
|
" | 使用用户当前首选的方向。 |
" | 使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。 |
" | 横向显示(宽度比高度要大) |
" | 纵向显示(高度比宽度要大) |
" |
|
" |
|
" |
|
" |
|
" | 显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。 |
" |
|
" | 屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。 |
注意:在给这个属性设置的值是“landscape”或“portrait”时,要考虑硬件对Activity运行的方向要求。正因如此,这些声明的值能够被诸如Google Play这样的服务所过滤,以便应用程序只能适用于那些支持Activity所要求的方向的设备。例如,如果声明了“landscape”、“reverseLandscape”或“sensorLandscape”,那么应用程序就只能适用于那些支持横向显示的设备。但是,还应该使用<uses-feature>元素来明确的声明应用程序所有的屏幕方向是纵向的还是横行的。例如:<uses-featureandroid:name=”android.hardware.screen.portrait”/>。这是GooglePlay提供的纯粹的过滤行为,平台本身并不控制您的应用程序是否可以安装在只支持某些放向的设备上。
android:stateNotNeeded
:这个属性用于设置在没有保存Activity状态的情况下,它能否被销毁且成功的重启。如果设置为true,则不引用Activity之前的状态就能够被重启,如果设置为false,重启Activity时,则需要它之前的状态。默认值是false
。
ps:如当这个属性设置为true时,onSaveInstanceState()方法就可以不被调用,并且调用onCreate()方法时,会用null来代替Bundle对象,就像Activity被第一次重启一样。
android:theme
:这个属性用于设定Activity整体主题,它会应用一个样式资源。系统会使用这个主题来自动的设置Activity的内容。如果这个属性没有设置,Activity会继承应用程序的主题(<application>元素的theme属性)做它的整体样式。如果这个属性也没有设置,那么默认使用系统的主题
。
android:uiOptions
:(
API level 14)
这个属性用于设置Activity的UI的额外选项。
none | 默认设置,没有额外的UI选项。 |
splitActionBarWhenNarrow | 在水平空间受到限制的时候,会在屏幕的底部添加一个用于显示ActionBar中操作项的栏,例如:在纵向的手持设备上。而不是在屏幕顶部的操作栏中显示 少量的操作项。它会把操作栏分成上下两部分,顶部用于导航选择,底部用于操作项目。这样就会确保可用的合理空间不仅只是针对操作项目,而且还会在顶部给导 航和标题留有空间。菜单项目不能被分开到两个栏中,它们要显示在一起。 |
android:windowSoftInputMode
:(
API Level 3)
这个属性用于设定Activity的主窗口与软件键盘的窗口如何交互。设置这个属性会影响以下两件事情:
1. 软键盘的状态:在Activity获取输入焦点时,软键盘是隐藏还是显示。
2. 调整Activity的主窗口:是调整Activity主窗口的大小,以便给软键盘腾出显示空间;还是在Activity窗口中的输入焦点被软键盘覆盖时,让Activity窗口中的内容平移,以便输入焦点能够显示给用户。这个属性必须用下表中的一个值来设定,或者是一个state…的值和一个adjust…的值的组合。这个属性设置的值会覆盖主题中设置的值。
stateUnspecified | 它不指定软键盘的状态(显示或隐藏)。系统会选择合适的状态,或者依赖主题中的设置。它是软键盘行为的默认设置。 |
stateUnchanged | 当Activity显示在前台时,软键盘会保持它最后的状态(显示或隐藏)。 |
stateHidden | 当用户选择这个Activity时,软键盘会隐藏。也就是说,当用户确认向前浏览到这个Activity的时候,而不是因为离开另一个Activity而返回这个Activity的时候。 |
stateAlwaysHidden | 当Activity的主窗口有输入焦点时,软键盘会始终隐藏。 |
stateVisible | 在适当的时候(通常是用户浏览到这个Activity的主窗口),软键盘是可见的。 |
stateAlwaysVisible | 当用户选择了这个Activity时,软键盘变的可见,也就是说,当用户确认向前浏览到这个Activity的时候,而不是因为离开另一个Activity而返回这个Activity的时候。 |
adjustUnspecified | 这个值并不指定Activity的主窗口会软键盘的显示而进行大小的调整,也不会指定Activity的主窗口是否会平移,以便把因软键盘所遮挡的输入焦点显示给用户。系统会依赖内容窗口中的内容是否能够滚动,来自动的选择这两种模式。如果Activity窗口中有一个能够滚动的布局,那么这个窗口就会被调整大小,并假设通过滚动能够在一个较小的区域内来浏览窗口中所有的内容。 |
adjustResize | 为适应软键盘的显示,Activity的主窗口始终要调整大小。 |
adjustPan | Activity的主窗口不会因软键盘的显示而调整大小,相反,窗口中的内容会被自动的平移,以便输入焦点不会被软键盘所遮挡,并且用户能够看到他们所输入的内容。通常很少使用这种模式,因为用户可能需要关闭软键盘,以便能够跟软键盘所遮挡进行交互。 |
<activity-alias>
<activity-alias
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:targetActivity="string" >
. . .
</activity-alias>
包含:
说明:
Activity的一个别名。目标Activity必须跟别名Activity在同一个应用程序中,并且这个Activity必须在别名之前被声明。
属性:
android:targetActivity:
这个属性用于设置通过别名所能够激活的那个Activity的名字。这个名字必须跟它前面的<activity>元素的name属性匹配。
其他属性和<Activity>的属性一样。
<meta-data>
<meta-data
android:name="string"
android:resource="resource specification"
android:value="string" />
说明:
这个元素用name- value对的格式给其父组件提供任意可选的数据。一个组件元素能够包含任意多个<meta-data>子元素,所有这些元素中定义的值会被收集到一个Bundle对象中,并且提供给组件的PackageItemInfo.metaData属性字段。
属性:
android:name
:
针对项目的一个唯一名称。
android:resource
:
这个属性定义了一个要引用的资源。资源的ID会跟这个项目进行关联。通过Bundle.getInt()方法能够从meta-data的Bundle对象中获取这个ID。
android:value
:
这个属性会给这个项目分配一个值。下表列出了可能分配的数据的数据类型,以及获取这些数据的方法。
Type | Bundle method |
字符串。对于一个Unicode字符,要使用双斜线(\\)来进行转义,如\\n和\\uxxxx | |
整数值,如100 | |
布尔值,true或false | |
颜色值,如#rgb、#argb、#rrggbb、#aarrggbb | |
浮点值,如1.23 |
使用方法:
1,在Activity中:
<activity...>
<meta-dataandroid:name="myMsg"android:value="hello my activity"/>
</activity>
PackageManager pm =getPackageManager();
ActivityInfo info =pm.getActivityInfo(getComponentName(),
PackageManager.GET_META_DATA);
String msg = info.metaData.getString("myMsg");
2,在application中:
<meta-dataandroid:name="myMsg"android:value="hello my application"/>
</application>
PackageManager pm =getPackageManager();
ApplicationInfo appInfo= pm.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
Stringmsg = appInfo.metaData.getString("myMsg");
3,在service中:
<service android:name="MetaDataService ">
<meta-dataandroid:name="myMsg"android:value="hello my service"/>
</service>
PackageManager pm= getPackageManager();
ComponentName cn = new ComponentName(this,MetaDataService.class);
ServiceInfo info = pm.getServiceInfo(cn,PackageManager.GET_META_DATA);
String msg = info.metaData.getString("myMsg");
4,在receiver中:
<receiver android:name="MetaDataService ">
<meta-dataandroid:name="myMsg"android:value="hello my receiver"/>
</receiver>
PackageManager pm =getPackageManager();
ComponentName cn = new ComponentName(this,MetaDataReceiver.class);
ActivityInfo info = pm.getReceiverInfo(cn, PackageManager.GET_META_DATA);
String msg = info.metaData.getString("myMsg");
<provider>
<provider
android:authorities="list"
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:grantUriPermissions=["true" | "false"]
android:icon="drawable resource"
android:initOrder="integer"
android:label="string resource"
android:multiprocess=["true" | "false"]
android:name="string"
android:permission="string"
android:process="string"
android:readPermission="string"
android:syncable=["true" | "false"]
android:writePermission="string" >
. . .
</provider>
被包含于:
包含:
定义一个内容提供者(content provider)。
属性:
android:authorities
:
标识内容提供器范围内的数据URI的授权列表,有多个授权时,要用分号来分离每个授权。为了避免冲突,授权名应该使用Java样式的命名规则 (如:com.example.provider.cartoonprovider)。通常,用ContentProvider子类名称来设定这个属性。
android:enabled:这个属性用于指定这个内容提供器是否能够被系统安装。设置为true,则可以安装;否则不能安装。默认值是true。<application>元素有它自己的enabled属性,这个属性会应用给所有的应用程序组件,包括内容提供器。<application> 和<provider>的enabled属性都必须设置为true(它们的默认值都是true)。如果有一个设置为false,那么提供器就被禁止安装。
android:exported:这个属性用于指定该内容提供器是否能够被其他的应用程序组件使用。如果设置为true,则可以被使用,否则不能被使用。如果设置为false,该提供器只有有相同用户ID的应用程序有效。默认值是true(从API 17开始默认值为false)。虽然能够使用这个属性来公开内容提供器,但是依然还要用permission属性来限制对它的访问。
android:grantUriPermission:这个属性用于设定那些对内容提供的数据没有访问权限的访问者,是否能够被授予访问的权限,这个权限是临时性的,它会克服由readPermission、 writePermission和permission属性的设置限制。如果这个属性设置为true,那么权限就可以授予访问者,否则不会授予没有访问权限的访问者。如果设置为true,则权限可以临时被授予内容提供器的任何数据。如果设置为false,则权限只能被授予<gran-uri- permission>子元素中所列出的数据子集。默认值是false。
这种授权是应用程序提供了一种一次性访问被权限所保护的数据的方法。例如,当一个e-mail包含了一个附件时,mail应用程序就可以调用适当的浏览器来打开附件,即使这个浏览器没有查看所有内容提供器数据的权限。
在这样的场景中,权限是通过激活组件的Intent对象中的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION标记来授予的。例如,mail应用程序可以把FLAG_GRANT_READ_URI_PERMISSION标记放到传递给Context.startActivity()方法的Intent参数中。这样权限就被授予了Intent对象中所指定的URI。
如果启用这个功能(把这个属性设置为true或定义<grant-uri-permission>子元素)时,在切换URI时,必须调用Context.revokeUriPermission()方法从提供器把权限删除。
android:icon:这个属性用于定义一个代表内容提供器的图标。它必须要引用一个包含图片定义的可绘制资源。如果这个属性没有设置,那么就会使用应用程序的<application>元素的icon属性值来代替。
android:initOrder:这个属性用于定义内容提供器应该被实例化的顺序,这个顺序是相对与相同进程所拥有的其他内容提供器的。当内容提供器间有相互的依赖时,就需要设置这个属性,以确保它们能够按照其依赖的顺序被创建。这个属性值是一个简单的整数,大的数字要被优先初始化。
Android:label:这个属性用于给内容提供器定义一个用户可读的标签。如果这个属性没有设置,那么它会使用<application>元素的label属性值来代替。这个标签应该引用一个字符串资源来设置,以便它能够像其他的用户界面中的字符串一样被本地化。但是为了方便应用程序的开发,也能够使用原生的字符串来设置这个属性,但正式发布时一定要引用字符串资源。
android:multiprocess:这个属性用于设定是否能够在每个使用该内容提供器的客户端进程中都创建一个内容提供器的实例,如果设置为true,这个能够在其每个客户端进程中创建一个实例,否则不可以。默认值是false。
通常,内容提供器是在定义它的应用程序的进程中被实例化的。但是,如果这个属性被设置为true,系统就能够在每个要与该内容提供器进行交互的客户端进程中创建一个内容提供器的实例,这样就避免了进程间通信的开销。
android:name:这个属性用于定义内容提供器的实现类的名称,它是ContentProvider类的一个子类。这个属性应该使用完整的Java类名来设定(如:com.example.project.TransportationProvider)。但是也可以使用简写(如:.TransporttationProvider),这时系统会使用<manifest>元素中指定的包名跟这个简写名称的组合来识别内容提供器。这个属性没有默认值,必须要给这个属性设定一个名称。
android:permission:这个属性用于设定客户端在读写内容提供器的数据时必须要有的权限的名称。这个属性为同时设置读写权限提供了一种便利的方法。但是readPermission和 writePermission属性的优先级要比这个属性高。如果readPermission属性也被设置了,那么它就会控制对内容提供器的查询访问。 如果writePermission属性被设置,它就会控制对内容提供器数据的修改访问。
android:readPermission:这个属性用于设置查询内容提供器的数据时,客户端所必须要有的权限。
android:writePermission:这个属性用于设置修改内容提供器的数据时,客户端所必须要有的权限。
android:process:这个属性用于定义内容提供器应该运行在那个进程中的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的默认进程中。它有与应用程序包相同的名称。<application>元素的process属性能够给其所有的组件设置一个不同的默认进程。但是每个组件都能够用它们自己的 process属性来覆盖这个默认设置,从而允许把应用程序分离到不同的多个进程中。
如果这个属性值是用“:”开头的,那么在需要这个提供器的时候,系统就会给这个应用程序创建一个新的私有进程,并且对应的Activity也要运行在那个私有进程中。如果用 小写字母开头,那么Activity则会运行在一个用这个属性值命名的全局进程中,它提供了对内容提供器的访问权限。这样就允许不同应用程序的组件能够共享这个进程,从而减少对系统资源的使用。
android:syncable:这个属性用于设定内容提供器控制下的数据是否要与服务器上的数据进行同步,如果设置为true,则要同步,否则不需要同步。
<grant-uri-permission>
<grant-uri-permission
android:path="string"
android:pathPattern="string"
android:pathPrefix="string" />
被包含于:
说明:
这个元素用于给内容提供器的数据子集授权。数据子集是由content:URI的路径部分来标识的。授权是提供器给客户端提供的一种能力,这样客户就可以访问通常没有权限访问的数据,从而克服基于单次访问的限制。
如果内容提供器的grantUriPermissions属性被设置为true,那么权限能够被授予内容提供器范围内的任何数据。但是,如果 grantUriPermission属性被设置为false,那么权限就只能授予这个元素所指定的数据子集。一个内容提供器能够包含任意多个<grant-uri-permission>元素。每个都只能指定一个路径(三个可能属性中的一个)。
属性:
android:path:
android:pathprefix:
android:pathPattern:
一个路径标识了能够被授权的一个或多个数据子集。path属性指定了一个完整的路径,权限只能被授予这个路径所标识的具体的数据子集。pathPrefix属性指定了路径的初始部分,权限能够被授予共享这个初始路径的所有数据子集。pathPattern属性指定了一个完整的路径,但是这个路径中包含了通配符:
1. 星号(*)通配符,路径中的*星号代表任意多个星号之前的那个字符,如a*,可跟a、aa、aaa、aaaa、...字符串匹配。
2. 点跟星号的组合(.*)通配符,它可以跟任意字符串进行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因为系统读取XML中的字符串时,会把’\’符号作为强制转义字符,因此就需要两次转义。例如,符号”*”要被写成”\\*”,符号’\’要被写成”\\\\”。这与Java代码中的写法基本相同。
有关这三种模式的更多信息,请看PatternMatcher类中的PATTERN_LITERAL、PATTERN_PREFIX、PATTERN_SIMPLE_GLOB的说明。
<path-permission>
<path-permission
android:path="string"
android:pathPrefix="string"
android:pathPattern="string"
android:permission="string"
android:readPermission="string"
android:writePermission="string" />
说明:
(API Level 4)这个元素用于定义内容提供器中的具体的数据子集的路径以及必要的权限。这个元素能够多次使用,以便提供多个路径。
属性:
android:path:给内容提供器的数据定义一个完整的URI(数据资源标识)路径。权限只能被授予这个路径所标识的具体数据。
android:pathPrefix:这个属性定义了内容提供器的数据子集的URI的初始部分。权限能够被授予所有那些共享这个URI初始部分的数据子集。
android:pathPattern:这个属性给内容提供器数据子集定义了一个完整的URI路径,但是URI中能够使用下列之一的通配符:
1. 星号(*)通配符,路径中的*星号代表任意多个星号之前的那个字符,如a*,可跟a、aa、aaa、aaaa、...字符串匹配。
2. 点跟星号的组合(.*)通配符,它可以跟任意字符串进行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因为系统读取XML中的字符串时,会把’\’符号作为强制转义字符,因此就需要两次转义。例如,符号”*”要被写成”\\*”,符号’\’要被写成”\\\\”。这与Java代码中的写法基本相同。
android:permission:这个属性定义了一个权限名称,为了读写内容提供器中的数,客户端必须要有这个权限。这个属性是给数据设置读写权限的便利的方法,但是readPermission和writePermission属性比这个属性的优先级要高。
android:readPermission:为了读取查询内容提供器中的数据,客户端必须要这个权限。
android:writePermission:为了能够改变由内容提供器所控制的数据,客户端必须要有这个权限。
<receiver>
<receiver
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</receiver>
包含:
说明:
这个元素用于声明一个广播接收器(一个BroadcastReceiver 子类),作为应用程序的组件之一。广播接收器能够让应用程序接收那些由系统或其他应用程序发出的广播Intent对象,即使是在该应用程序的其他组件没有 运行的时候,也能够接收来自系统或其他应用程序的广播消息。
有两种方式让系统知道本应用程序用户一个广播接收器:
1. 在应用程序的清单文件中,使用本元素来声明注册一个广播接收器;
2. 在代码中动态的创建一个广播接收器,并使用Context.registerReceiver()方法来注册它。有关更多动态创建接收器的方法,请看BoradcastReceiver类说明。
属性:
android:enabled:这个属性用于定义系统是否能够实例化这个广播接收器,如果设置为true,则能够实例化,如果设置为false,则不能被实例化。默认值是true。<application> 元素有它自己的enabled属性,这个属性会应用给应用程序的所有组件,包括广播接收器。<application>和<receiver>元素的这个属性都必须是true,这个广播接收器才能够被启用。如果有一个被设置为false,该广播接收器会被禁止 实例化。
android:exported:这个属性用于指示该广播接收器是否能够接收来自应用程序外部的消息,如果设置true,则能够接收,如果设置为false,则不能够接收。如果设置为false,这该接收只能接收那些由相同应用程序组件或带有相同用户ID的应用程序所发出的消息。
它的默认值依赖它所包含的Intent过滤器。如果不包含过滤器,则接收器只能由指定了明确类名的Intent对象来调用,这就意味着该接收器只能在应用程序内部使用(因为通常在应用程序外部是不会知道这个类名的)。这种情况下默认值就是false。另一方面,如果接受器至少包含了一个过滤器,那么就意味着这个接收器能够接收来自系统或其他应用程序的Intent对象,因此默认值是true。
这个属性不是唯一的限制广播接收外部调用的方法,还能够通过全限来限制能够给它发送消息的外部实体。
android:icon:这个属性定义了一个代表广播接收器的图标,这个属性必须用包含图片定义的可绘制资源来设定。如果没有设置这个属性,会是应用<application>元素的icon属性值来代替。无论是这个属性还是<application>元素的icon属性,它们设置的图标也是所有的接收器的Intent过滤器的默认图标。
android:label:这个属性给广播接收器设定一个用户可读的懂的文本标签。如果这个属性没有设置,那么就会使用<application>元素的label属性值来代替。无论是这个属性还是<application>元素的label属性,它们设置的标签也是所有的接收器的Intent过滤器的默认标签。应该使用一个字符串资源来设置这个属性,以便它能够像用户界面中的其他字符串一样能够被本地化。但是,为了应用开发的便利,也能够使用原生的字符串来设置。
android:name:这个属性值要用广播接收器的实现类的类名来设置,它是BroadcastReceiver类的一个子类。通常要使用类的全名来设置 (如:com.example.project.ReportReceiver)。但是,也可以使用简写(如:.ReportReceiver)。系统会 自动的把<manifest>元素中的package属性所设定的包名添加到这个简写的名称上。一旦发布了应用程序,就不应该在改变这个名字了(除非android:exported=”false”)。这个属性没有默认值,这个名字必须被指定。
android:permission:这个属性用于定义把消息发送给该广播接收器的广播器所必须要有的权限。如果没有设置这个属性,那么<application>元素的permission属性所设置的权限就适用于这个广播接收器。如果<application>元素也没有设置权限,那么该接收器就不受权限的保护。
android:process:这个属性用于设置该广播接收器应该运行在那个进程中的进程名。通常,应用程序的所有组件都在给应用程序创建的默认进程中运行,它有与应用程序包名相同的名 称。<application>元素的process属性能够给它的所有组件设置一个不同的默认进程,但是它的每个组件自己的process 属性能够覆盖这个默认设置,这样就允许把一个应用程序分离到多个进程中。如果这个属性值用“:” 开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该广播接收器也会运行在这个进程中。如果这个属性值用小写字母开头,那么接收器就会运行在以这个属性值命名的全局进程中,它提供使其工作的权限。这样就允许不同的应用程序组件来共享这个进程。
<service>
<service
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:isolatedProcess=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</service>
包含:
说明:
这个元素用于声明一个服务(Service类的子类)作为应用程序的组件之一。跟Activity不一样,服务没有可见的用户界面。它们被用于实现长时的后台操作,或提供能够被其他应用程序调用的通信API。
所有的服务都必须用清单文件中的<service>元素来代表。任何没有在清单中声明的服务都不能被系统看到,也不会被运行。
属性:
android:enabled:这个属性用于指示该服务是否能够被实例化。如果设置为true,则能够被实例化,否则不能被实例化。默认值是true。<application> 元素有它自己的enabled属性,它的这个属性适用于应用中所有的组件,包括service组件。对于被启用的服 务,<application>和<service>元素的enabled属性都必须是true(默认值都是true)。如果有 一个元素的enabled属性被设置为false,该服务就会被禁用,而不能被实例化。
android:exported:这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。它的默认值依赖与该服务 所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。
这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。
android:icon:这个属性定义了一个代表服务的图标,它必须要引用一个包含图片定义的可绘制资源。如果这个属性没有设置,则会使用<application>元素的icon属性所设定的图标来代替。无论是<application>元素设置的图标,还是<service>元素所设置的图标,它们都是该服务所有的Intent过滤器的默认图标。
android:label:这个属性用于设定一个要显示给用户的服务的名称。如果没有设置这个属性,则会使用<application>元素的label属性值来代替。无论是<service>设定的标签,还是<application>元素设定的标签,它们都是该服务所有的Intent过滤器的默认标签。这个标签应用引用一个字符串资源,以便它能够像用户界面中的字符串一样能够被本地化。但是,为了开发应用程序方便,也可以使用原生字符串来设置这个属性。
android:name:这个属性用于指定实现该服务的Service子类的类名。它应该是完整的Java类名(如:com.example.project.RoomService)。但是,也可以使 用简写(如:.RoomService),系统会把<manifest>元素中package属性所设定的值添加到简写名称的前面。一旦发布了应用程序,就不应该改变这个名称(除非android:exported=”false”)。这个属性没有默认值,名称必须要指定。
android:permission:这个属性定义了要启动或绑定服务的实体必须要有的权限。如果调用者的startService()、bindService()和stopService()方法没有被授予这个权限,那么这些方法就不会工作,并且Intent对象也不会发送给改服务。如果这个属性没被设置,那么通过<appliction>元素的permission属性所设定的权限就会适用于该服务。如果<application>元素也没有设置权限,则该服务不受权限保护。
android:process:这个属性用于设定服务所运行的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的进程中,进程名与应用程序的包名相同。<application>元素的 process属性能够给应用程序的所有组件设置一个不同的默认名称。但是每个组件自己的process属性都能够覆盖这个默认值,这样允许把应用程序分 离到不同的多个进程中。如果这个属性值用“:” 开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该服务也会运行在这个进程中。如果这个属性值用小写字母开头,那该服务就会运行在以这个属性值命名的全局进程中,它提供了使其工作的权限。这样就允许不同的应用程序组件来共享这个进程,从而降低资源的使用。
<uses-library>
<uses-library
android:name="string"
android:required=["true" | "false"] />
说明:
这个元素用于指定该应用程序必须链接的共享类库。这个元素告诉系统该应用程序包的类装载器中所包含的类库代码。Android的所有包 (如andorid.app,android.content,android.view和android.widget等)都在应用程序自动链接的默认类库中。但是,有些包是在于独立的类库中,它们不能被自动的链接到应用程序包中,要查看这些包的文档,以确定要把哪些类库包含到包的代码中。这个元素也会影响该应用程序在特殊设备上的安装,以及应用程序在Google Play上的可用性。
安装(Installation)
如果在该应用的清单中出现这个元素,并且它的android:required属性被设置为true,那么除非该类库在用户的设备上存在,否则PackageManager框架不会让用户安装这个应用程序。
Google Play
Google Play会基于要安装在用户设备上的类库来过滤应用程序。有关过滤的更多信息,请看Filters on Google Play(http://developer.android.com/guide/appendix/market-filters.html)
属性:
android:name:这个属性用于指定类库的名称。这个名称是在对应的类库文档中提供的。例如:android.test.runner库就是包含Android测试类的一个程序包。
android:required:(API Level 7)这个属性用于指定应用程序是否需要有android:name属性所指定的类库:true:没有这个库应用程序无法工作。如果用户设备设备上没有这个类库,系统不允许该应用程序安装在这个设备上。false:如果该类库存在,则应用程序能够使用这个类库,但是如果有必要,也可以设计成没有该类库,应用程序也能够工作。系统会允许应用程序安装,即使该类库不存在。如果使用false,就要在运行时对类库的有效性进行必要的检查。对于类库的检查,可以使用反射机制来判断一个具体的类是否有效。默认值是true。
<intent-filter>
<intent-filter
android:icon="drawable resource"
android:label="string resource"
android:priority="integer" >
. . .
</intent-filter>
被包含于:
必须包含:
能够包含:
说明:
这个元素用于指定 Activity、Service或BroadcastReceiver能够响应的Intent对象的类型。Intent过滤器声明了它的父组件的能力---Activity或Service所能做的事情和 Broadcast Receiver所能够处理的广播类型。它会打开组件来接收它所声明类型的Intent对象,过滤掉那些对组件没有意义的Intent对象请求。
过滤器的大多数内容是通过<action>、<category>和<data>子元素来描述的。
属性:
android:icon:当组件要把过滤器所具有的能力展示给用户时,会使用这个属性所设置的图标来表示它的父组件(Activity、Service或BroadcastReceiver)。这个属性必须要引用一个包含图片定义的可绘制资源。默认值是由父组件的icon属性设置的。如果父组件没有指定一个图标,那么默认值就会使用<application>元素所设置的icon。
android:label:这个属性用于给其父组件设置一个用户可读的标签。这个标签不是有其父组件设置的那个,在组件要把过滤器所具有的能力展示给用户的时候,要使用这个属性值。这个属性值应该引用一个字符串资源,以便它能够像用户界面中的其他字符串一样,能够被本地化。但是,为了开发应用程序的便利,也可以使用原生的字符串。这个属性的默认值是有它的父组件提供的。如果父组件没有指定一个标签,那么默认值就会使用由<application>元素的所设置的标签。
android:priority:这个属性用于给过滤器设置一个优先级。其父组件能够通过优先级来依次处理过滤器所描述类型的Intent对象。这个属性对Activity和Broadcast Receiver对象有意义:
1. 它提供了 Activity能够如何响应跟过滤器匹配的Intent对象请求的信息(相对与其他的也能响应这个Intent请求的Activity)。当一个 Intent对象请求能够被多个带有不同优先级的Activity处理时,Android系统只考虑把高优先级的Intent过滤器作为潜在的 Intent对象请求目标。
2. 它控制了Broadcast Receiver执行接收广播消息的顺序。高优先级的过滤器会优先调用。(这个顺序只应用与同步消息,对于异步消息会忽略优先级的设置。)只有真正想要给接收广播消息的过滤器施加一个特定顺序,或者要强制Android来应用另外一个Activity,才会使用这个属性。这个属性值必须是一个整数,如:100,数字越大,优先级越高。
<action>
<action android:name="string" />
说明:
在过滤器中添加一个行为,<intent-filter>
中至少要包含一个
<action>,如果一个也没有包含,该过滤器将被忽略。
属性:
android:name
:行为的名字。系统行为定义在Intent类里面,以ACTION_开头的常量。如果是自定义的行为,
最好使用包名作为前缀,确保唯一性。
<category>
<category android:name="string" />
说明:
在过滤器中添加一个分类。
属性:
android:name
:分类的名字。定义在Intent类里面,以系统行为定义在Intent类里面,开头的常量。
自定义类别应该使用包名作为前缀,以确保它们是独一无二的。
<data>
<data
android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
被包含于:
说明:
这个元素用于把数据规范添加到一个Intent过滤器中,数据规范能够只是数据类型(mimeType属性)、或数据位置标识(URI),也可以是数据类型和数据位置标识(URI)。一个URI(如下格式)被分成几个独立的属性来分别指定:
scheme://host:port/pathorpathPrefixor pathPattern
这些属性是可选的,但也是相互依赖的。如果没有给Intent过滤器指定scheme属性,那么所有其他的URI属性都会被忽略。如果没有给过滤器指定host属性,那么port属性和所有的路径属性都会被忽略。。
属性:
android:host:这个属性用户定义URI授权的主机部分,除非给过滤器也指定了<data>元素的scheme属性,否则这个属性没有意义。
注意:在Android框架中,主机名的匹配是大小写敏感的,跟RFC格式不一样。因此,要始终使用小写字母来指定主机名。
android:mimeType:这个属性用于设定数据的MIME类型,如:image/jpeg或audio/mpeg4-generic。其子类型可用星号通配符(*)来代替,指示能够跟任何子类型匹配。
注意:在Android框架中,MIME类型的匹配是大小写敏感的,跟RFC格式不一样。因此,要始终使用小写字母来指定MIME类型。
android:path:
android:pathPrefix:
android:pathPattern:
这个三个属性用于指定URI的路径部分。Path属性指定一个完整的路径,这个路径会跟Intent对象中的路径进行匹配。PathPrefix属性只指定了部分路径,它会跟Intent对象中的路径初始部分匹配。pathPattern属性指定一个要跟Intent对象中的路径进行匹配的完整路径,但是这个路径中可以包含下列通配符:
1. 星号(*)通配符,路径中的*星号代表任意多个星号之前的那个字符,如a*,可跟a、aa、aaa、aaaa、...字符串匹配。
2. 点跟星号的组合(.*)通配符,它可以跟任意字符串进行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因为系统读取XML中的字符串时,会把’\’符号作为强制转义字符,因此就需要两次转义。例如,符号”*”要被写成”\\*”,符号’\’要被写成”\\\\”。这与Java代码中的写法基本相同。
有关这三种模式的更多信息,请看PatternMatcher类中的PATTERN_LITERAL、PATTERN_PREFIX、PATTERN_SIMPLE_GLOB的说明。
http://developer.android.com/reference/android/os/PatternMatcher.html
android:port:这个属性用于定义URI授权的端口部分。只有给过滤器指定了scheme和host属性时,这个属性才有意义。
android:scheme:这个属性用于设定URI的scheme部分。它是给指定URI设置的最基本的属性,至少要给过滤器设置一个scheme属性,否则,其他的URI属性就没有意义了。scheme属性值没有”:”符号结尾(如,http,而不是http: )如果过滤器有一个数据类型(设置了mimeType属性),但没有设置scheme属性,那么系统就会假定scheme是content:和file:
注意:在Android框架中,scheme的匹配时大小写敏感的,跟RFC格式不一样。因此,要始终使用小写字母来指定scheme。
参考资料:
http://blog.csdn.net/FireOfStar/article/category/511259/11
http://developer.android.com/guide/topics/manifest/manifest-intro.html