Android 设置

在 Android 平台上,可以使用应用程序描述符的 android 元素将信息添加到 Android 应用程序清单,该清单是 Android 操作系统使用的应用程序属性文件。创建 APK 包时,ADT 会自动生成 Android Manifest.xml 文件。AIR 会将几个属性设置为某些功能运行所需要的值。在 AIR 应用程序描述符的 android 部分设置的任何其他属性都会添加到 Manifest.xml 文件的相应部分。

注: 对于大多数 AIR 应用程序,您必须在 android 元素内设置应用程序所需的 Android 权限,但通常不需要设置其他任何属性。

只能设置形式为字符串、整数或布尔值的属性。不支持对应用程序包中的资源的引用进行设置。

注: 运行时需要的最低 SDK 版本应不低于 14。如果想创建仅适用于更高版本的应用程序,应确保 Manifest 包含 <uses-sdk android:minSdkVersion=""></uses-sdk> 并指定正确的版本。

保留的 Android 清单设置

AIR 会在生成的 Android 清单文档中设置多个清单项目,以确保应用程序和运行时功能正确运行。您不能定义以下设置:

manifest 元素

不能设置 manifest 元素的以下属性:

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

activity 元素

不能设置主 activity 元素的以下属性:

  • android:label

  • android:icon

application 元素

不能设置 application 元素的以下属性:

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Android 权限

Android 安全模型需要每个应用程序都请求权限,以便使用在安全性或隐私保护方面有作用的功能。打包应用程序时必须指定这些权限,并且不能在运行时进行更改。安装应用程序时,Android 操作系统会通知用户应用程序正在请求哪些权限。如果没有请求某项功能需要的权限,当应用程序访问该功能时,Android 操作系统可能会引发异常,但并非一定会引发异常。运行时会将异常传递给应用程序。在无提示失败情况下,权限失败消息会添加到 Android 系统日志。

在 AIR 中,可以在应用程序描述符的 android 元素内指定 Android 权限。以下格式用于添加权限(其中 PERMISSION_NAME 是 Android 权限的名称):

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

manifest 元素内的 uses-permissions 语句会直接添加到 Android 清单文档。

以下是使用各种 AIR 功能需要的权限:

ACCESS_COARSE_LOCATION
允许应用程序通过 Geolocation 类访问 WIFI 和移动电话网络位置数据。

ACCESS_FINE_LOCATION
允许应用程序通过 Geolocation 类访问 GPS 数据。

ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE
允许应用程序通过 NetworkInfo 类访问网络信息。

CAMERA
允许应用程序访问摄像头。
注: 当您请求使用摄像头功能的权限时,Android 会假设应用程序也需要摄像头。如果摄像头是应用程序的可选功能,应该将 uses-feature 元素添加到摄像头清单中,并将需要的属性设置为 false。请参阅 Android 兼容性筛选

INTERNET
允许应用程序提出网络请求。也允许远程调试。

READ_PHONE_STATE
允许 AIR 运行时在打电话期间将音频调节到静音。如果您的应用程序在背景中播放音频,则应设置此权限。

RECORD_AUDIO
允许应用程序访问麦克风。

WAKE_LOCK 和 DISABLE_KEYGUARD
允许应用程序使用 SystemIdleMode 类设置阻止设备休眠。

WRITE_EXTERNAL_STORAGE
允许应用程序写入设备上的外部存储卡。

例如,若要为会需要每种权限的应用程序设置该权限,可以将以下内容添加到应用程序描述符:

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android 自定义 URI 方案

可以使用自定义 URI 方案从网页或本机 Android 应用程序启动 AIR 应用程序。自定义 URI 支持依赖于 Android 清单中指定的方法滤镜,因此在其他平台上不能使用此技术。

若要使用自定义 URI,请将方法滤镜添加到应用程序描述符的 <android> 区块内。必须指定以下示例中的两个 intent-filter 元素。编辑 <data android:scheme="my-customuri"/> 语句以反映自定义方案的 URI 字符串。

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

方法滤镜会通知 Android 操作系统可以使用您的应用程序执行指定操作。对于自定义 URI 而言,这意味着用户单击了使用该 URI 方案的链接(浏览器不知道该如何处理)。

通过自定义 URI 调用应用程序时,NativeApplication 对象会调度一个 invoke 事件。此链接的 URL(包括查询参数)放在 InvokeEvent 对象的 arguments 数组中。您可以使用任意多个方法滤镜。

注: StageWebView 实例中的链接无法打开使用自定义 URI 方案的 URL。

Android 兼容性筛选

Android 操作系统使用应用程序清单文件中的大量元素来确定应用程序与指定设备是否兼容。可以选择将此信息添加到清单中。如果不包括这些元素,则可以将您的应用程序安装在任何 Android 设备上。但是,它可能不会在任何 Android 设备上都正常运行。例如,摄像头应用程序在没有摄像头的电话上将没有什么用处。

可以用于过滤的 Android 清单标签包括:

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk(在 AIR 3+ 中)

摄像头应用程序

如果为应用程序请求摄像头权限,Android 会假设应用程序需要所有可用的摄像头功能,包括自动聚焦和闪光。如果应用程序不需要所有摄像头功能,或者如果摄像头是可选功能,则应对摄像头的各个 uses-feature 元素进行设置以指示这些功能是可选的。否则,使用缺少某项功能或根本没有摄像头的设备的用户将无法找到 Android Market 上的应用程序。

以下示例说明了如何为摄像头请求权限,以及如何将所有摄像头功能设置为可选:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

录音应用程序

如果您请求录音权限,则 Android 还会假设该应用程序需要麦克风。如果录音是您的应用程序的一个可选功能,则可以添加 uses-feature 标签以指定不需要麦克风。否则,使用不带麦克风设备的用户在 Android Market 上将找不到您的应用程序。

下面的例子说明了如何请求使用麦克风的权限,同时仍然使麦克风硬件处于可选状态:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

安装位置

通过将 Android manifest 元素的 installLocation 属性设为 autopreferExternal,您可以允许将应用程序安装或移动到外部存储卡上:

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Android 操作系统不保证您的应用程序会安装到外部内存上。用户也可以使用系统设置应用程序将应用程序在内部与外部内存之间进行移动。

即使安装到外部内存,应用程序缓存和用户数据(如应用程序存储目录的内容、共享对象和临时文件)仍会存储在内部内存上。若要避免使用太多的内部内存,对于要保存到应用程序存储目录的数据应有所选择。应使用 File.userDirectoryFile.documentsDirectory 位置(这两者都会映射到 Android 上 SD 卡的根目录)将大量数据保存到 SDCard 上。

在 StageWebView 对象中启用 Flash Player 和其他插件

在 Android 3.0 以上的版本中,应用程序必须在 Android 应用程序元素中启用硬件加速,才能在 StageWebView 对象中显示插件内容。要启用插件渲染,可将 application 元素的 android:hardwareAccelerated 属性设置为 true

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

颜色深度

在 AIR 3 和更高版本中,运行时将显示设置为呈现 32 位颜色。在早期版本的 AIR 中,运行时使用 16 位颜色。您可通过使用应用程序描述符中的 <colorDepth> 元素,指示运行时使用 16 位颜色:

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

使用 16 位颜色深度可提高渲染性能,但是会牺牲颜色保真度。