Android复习(三)清单文件中的元素——>uses-configuration、uses-library、uses-permission、uses-permission-sdk-23
<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"] />
- 包含于:
<manifest>
- 说明:
- 指示应用所需的硬件和软件功能。例如,应用可能会指定它需要物理键盘或特定的导航设备(如轨迹球)。该规范用于避免将应用安装在它无法正常运行的设备上。
注意:大多数应用都不会使用此清单标记。您应始终支持使用方向键输入,以便帮助视障的用户,并支持提供除触摸之外的方向键输入或者以方向键代替触摸输入的设备。如需了解如何在应用中支持方向键输入,请阅读启用焦点导航。如果您的应用在没有触摸屏的情况下完全无法正常运行,则改用
<uses-feature>
标记来声明所需的触摸屏类型,类型范围从"android.hardware.faketouch"
(表示基本的触摸样式事件)到更高级的触摸类型(如"android.hardware.touchscreen.multitouch.jazzhand"
,表示多个手指的不同输入)。 - 属性:
android:reqFiveWayNav
- 应用是否需要五向导航控件 - 如果需要,则为“
true
”;如果不需要,则为“false
”。五向控件可以将选择向上、向下、向右或向左移动,还提供调用当前选择的方式。它可以是方向键、轨迹球,也可以是其他设备。如果应用需要方向控件(而不是特定类型的控件),则可以将此属性设置为“
true
”并忽略reqNavigation
属性。不过,如果应用需要特定类型的方向控件,则可忽略此属性并改为设置reqNavigation
。 android:reqHardKeyboard
- 应用是否需要硬件键盘 - 如果需要,则为“
true
”;如果不需要,则为“false
”。 android:reqKeyboardType
- 应用所需的键盘类型(如果有)。此属性不区分硬件键盘和软件键盘。如果需要特定类型的硬件键盘,请在此处指定类型,并将
reqHardKeyboard
属性设置为“true
”。该值必须是以下字符串之一:
值 说明 “ undefined
”应用不需要键盘。(未定义键盘要求。)这是默认值。 “ nokeys
”应用不需要键盘。 “ qwerty
”应用需要标准的 QWERTY 键盘。 “ twelvekey
”应用需要十二键拨号键盘(如大多数手机上的此类键盘),带有从 0
到9
数字的键以及星号 (*
) 和井号 (#
) 键。 android:reqNavigation
- 应用所需的导航设备(如果有)。该值必须是以下字符串之一:
值 说明 “ undefined
”应用不需要任何类型的导航控件。(未定义导航要求。)这是默认值。 “ nonav
”应用不需要导航控件。 “ dpad
”应用需要用于导航的方向键。 “ trackball
”应用需要用于导航的轨迹球。 “ wheel
”应用需要导航轮。 如果应用需要导航控件,但控件的确切类型无关紧要,则应用可以将
reqFiveWayNav
属性设置为“true
”(而不是设置此属性)。 android:reqTouchScreen
- 应用所需的触摸屏类型(如果有)。该值必须是以下字符串之一:
值 说明 “ undefined
”应用不需要触摸屏。(未定义触摸屏要求。)这是默认值。 “ notouch
”应用不需要触摸屏。 “ stylus
”应用需要使用触控笔操作的触摸屏。 “ finger
”应用需要可以用手指操作的触摸屏。 注意:如果您的应用需要某些类型的触摸输入,则应改用
<uses-feature>
标记来声明所需的触摸屏类型(从表示基本触摸样式事件的"android.hardware.faketouch"
开始)。
<uses-library>
注意:Google Play 使用您的应用清单中声明的 <uses-library> 元素,从不符合其库要求的设备中过滤掉您的应用。如需详细了解如何过滤,请参阅 Google Play 过滤器一文。
- 语法:
-
<uses-library android:name="string" android:required=["true" | "false"] />
- 包含于:
<application>
- 说明:
- 指定应用必须与之关联的共享库。此元素告知系统将库的代码添加到软件包的类加载器中。
所有
android
软件包(例如android.app
、android.content
、android.view
和android.widget
)都位于所有应用自动与之关联的默认库中。不过,某些软件包(例如maps
)位于未自动关联的独立库中。请参阅您使用的软件包的相关文档,确定哪个库包含软件包代码。此元素还会影响应用在特定设备上安装以及应用在 Google Play 上的可用性:
- 安装
- 如果此元素存在并且其
android:required
属性设置为true
,则PackageManager
框架将不允许用户安装应用,除非用户设备上存在相应的库。
下一部分详细介绍了
android:required
属性。 - 属性:
android:name
- 库的名称。此名称由您使用的软件包的文档提供。例如,“
android.test.runner
”是一个包含 Android 测试类的软件包。 android:required
- 布尔值,指示应用是否需要
android:name
指定的库:"true"
:如果没有此库,则应用将无法正常运行。系统不允许在没有此库的设备上安装应用。"false"
:应用可以使用此库(如果存在),但专门在没有此库的情况下运行(如果有必要)。系统允许安装应用,即使不存在此库也是如此。如果您使用"false"
,则需要在运行时检查有没有此库。要检查库,您可以使用反射来确定有没有特定类。
默认值为
"true"
。引入于:API 级别 7。
<uses-permission>
注意:在某些情况下,您通过 <uses-permission>
请求的权限可影响 Google Play 如何过滤您的应用。
如果您请求硬件相关的权限(例如 CAMERA
),则 Google Play 会假设您的应用需要底层硬件功能,并从设备过滤掉不提供该功能的应用。
要控制过滤,务必在 <uses-feature>
元素中显式声明硬件功能,而不是依赖 Google Play“发现” <uses-permission>
元素中的要求。然后,如果要对特定功能停用过滤,可将 android:required="false"
属性添加到 <uses-feature>
声明中。
有关暗示硬件功能的权限列表,请参阅 <uses-feature>
元素的文档。
- 语法:
-
<uses-permission android:name="string" android:maxSdkVersion="integer" />
- 包含它的文件:
<manifest>
- 说明:
- 指定用户必须授予的系统权限,以便应用正常运行。当(在运行 Android 5.1 和更低版本的设备上)安装应用或(在运行 Android 6.0 和更高版本的设备上)运行应用时,用户会授予权限。
如需了解有关权限的详细信息,请参阅简介的权限部分和单独的系统权限 API 指南。您可以在
android.Manifest.permission
中找到基础平台定义的权限列表。 - 属性:
android:name
- 权限的名称。可以是应用通过
<permission>
元素定义的权限、另一个应用定义的权限,或者一个标准系统权限(例如"android.permission.CAMERA"
或"android.permission.READ_CONTACTS"
)。如这些示例所示,权限名称通常以软件包名称为前缀。 android:maxSdkVersion
- 此权限应授予应用的最高 API 级别。如果从某个 API 级别开始不再需要应用所需的权限,则设置此属性非常有用。
例如,从 Android 4.4(API 级别 19)开始,应用在外部存储空间写入其特定目录(
getExternalFilesDir()
提供的目录)时不再需要请求WRITE_EXTERNAL_STORAGE
权限。但 API 级别 18 和更低版本需要此权限。因此,您可以使用如下声明,声明只有 API 级别 18 及以前版本才需要此权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
这样,从 API 级别 19 开始,系统将不再向您的应用授予
WRITE_EXTERNAL_STORAGE
权限。此属性为 API 级别 19 中的新增属性。
<uses-permission-sdk-23>
- 语法:
-
<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" />
- 包含它的文件:
<manifest>
- 说明:
- 指明应用需要特定权限,但仅当应用在 Android 6.0(API 级别 23)或更高版本的设备上安装时才需要。如果设备运行的是 API 级别 22 或更低版本,则应用没有指定的权限。
当您更新应用以包含需要其他权限的新功能时,此元素很有用。如果用户在运行 API 级别 22 或更低版本的设备更新应用,系统在安装时会提示用户授予在该更新中声明的所有新权限。如果某个新功能无关紧要,您可能想同时在这些设备上停用该功能,以便用户不需要授予额外权限即可更新应用。如果使用
<uses-permission-sdk-23>
元素而非<uses-permission>
,则仅当应用在支持运行时权限模式(用户在应用运行时向其授予权限)的平台上运行时才可请求权限。如需了解有关权限的详细信息,请参阅简介的权限部分和单独的系统权限 API 指南。您可以在
android.Manifest.permission
中找到基础平台定义的权限列表。 - 属性:
android:name
- 权限的名称。此权限可以是应用通过
<permission>
元素定义的权限、另一个应用定义的权限,或者一个标准系统权限(例如"android.permission.CAMERA"
或"android.permission.READ_CONTACTS"
)。 android:maxSdkVersion
- 此权限应授予应用的最高 API 级别。如果应用安装在 API 级别较高的设备上,则应用不会被授予权限,无法使用任何相关功能。