Configuración de Android

En la plataforma Android, se puede usar el elemento android del descriptor de la aplicación para añadir información en el manifiesto de la aplicación de Android, que es un archivo de propiedades de la aplicación utilizado por el sistema operativo Android. ADT genera automáticamente el archivo Manifest.xml de Android cuando se crea el paquete APK. AIR establece unas cuantas propiedades en los valores necesarios para que funcionen determinadas funciones. Cualquier otra propiedad definida en la sección de Android del descriptor de la aplicación de AIR se añada a la sección correspondiente del archivo Manifest.xml.

Nota: en la mayoría de las aplicaciones de AIR, se deben establecer los permisos de Android necesarios por la aplicación en el elemento android , pero generalmente no es necesario establecer ninguna otra propiedad.

Solo se pueden establecer los atributos que adoptar valores booleanos, enteros o de cadena. La definición de referencias en el paquete de la aplicación no se admite.

Nota: El motor de ejecución requiere como mínimo la versión del SDK igual o mayor que 14. Si desea crear una aplicación solo para versiones más altas, asegúrese de que el elemento manifest incluya <uses-sdk android:minSdkVersion=""></uses-sdk> con la versión correcta.

Configuración reservada del manifiesto de Android

AIR establece varias entrada de manifiesto en el documento de manifiesto de Android generado para garantizar que las funciones del motor de ejecución y la aplicación funcionan correctamente. No se pueden definir las siguientes opciones:

Elemento manifest

Los siguientes atributos del elemento de manifiesto no se pueden establecer:

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

Elemento activity

Los siguientes atributos del elemento de actividad principal no se pueden establecer:

  • android:label

  • android:icon

Elemento application

Los siguientes atributos del elemento de la aplicación no se pueden establecer:

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Permisos de Android

El modelo de seguridad de Android requiere que cada aplicación solicite permiso para poder utilizar las funciones que tienen implicaciones de seguridad o privacidad. Estos permisos se deben especificar cuando la aplicación se empaqueta y no se pueden modificar en tiempo de ejecución. El sistema operativo Android informa al usuario sobre qué permisos solicita la aplicación cuando el usuario la instala. Si un permiso necesario para una función no se solicita, puede que el sistema operativo Android genere una excepción cuando la aplicación acceda a la función, pero la excepción no está garantizada. Las excepciones se transmiten a la aplicación mediante el motor de ejecución. En el caso de un error silencioso, se añade un mensaje de error de permiso al registro del sistema de Android.

En AIR, los permisos de Android se especifican en el elemento android del descriptor de la aplicación. El siguiente formato se utiliza para añadir permisos (PERMISSION_NAME es el nombre de un permiso de Android):

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

Las sentencias uses-permissions del elemento manifest se añaden directamente al documento manifiesto de Android.

Los siguientes permisos son necesarios para utilizar diversas funciones de AIR:

ACCESS_COARSE_LOCATION
Permite que la aplicación acceda a datos de ubicación de red WIFI y móvil a través de la clase Geolocation.

ACCESS_FINE_LOCATION
Permite que la aplicación acceda a datos GPS a través de la clase Geolocation.

ACCESS_NETWORK_STATE y ACCESS_WIFI_STATE
Permite que la aplicación acceda a la información de red a través de la clase NetworkInfo.

CAMERA
Permite que la aplicación acceda a la cámara.
Nota: cuando se pide permiso para utilizar la función de cámara, Android entiende que la aplicación también requiere la cámara. Si la cámara es una función opcional de la aplicación, se debe añadir un elemento uses-feature al manifiesto para la cámara, establecido en atributo necesario en false . Consulte Filtro de compatibilidad con Android .

INTERNET
Permite que la aplicación realice solicitudes de red y permite la depuración remota.

READ_PHONE_STATE
Permite que el motor de ejecución de AIR silencie el audio durante las llamadas de teléfono. Este permiso se debe establecer si la aplicación reproduce audio mientras está en segundo plano.

RECORD_AUDIO
Permite que la aplicación acceda al micrófono.

WAKE_LOCK y DISABLE_KEYGUARD
Permite que la aplicación impida que el dispositivo entre en reposo con la configuración de la clase SystemIdleMode.

WRITE_EXTERNAL_STORAGE
Permite que la aplicación escriba en la tarjeta de memoria externa del dispositivo.

Por ejemplo, para establecer permisos para una aplicación que requiera todos los permisos, se puede añadir lo siguiente al descriptor de la aplicación:

<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>

Esquemas de URI personalizados de Android

Puede utilizar un esquema de URI personalizado para iniciar una aplicación de AIR desde una página web o una aplicación nativa de Android. La compatibilidad con URI personalizado se basa en los filtros prácticos especificados en el manifiesto de Android, por lo que esta técnica no se puede utilizar en otras plataformas.

Para usar un URI personalizado, añada un filtro práctico al descriptor de la aplicación en el bloque <android> . Ambos elementos intent-filter del siguiente ejemplo se deben especificar. Edite la sentencia <data android:scheme=" my-customuri "/> para reflejar la cadena URI para el esquema personalizado.

<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>

Un filtro práctico informa al sistema operativo Android de que la aplicación está disponible para realizar una operación concreta. En el caso de un URI personalizado, esto significa que el usuario ha hecho clic en un vínculo utilizando ese esquema de URI (y el navegador no sabe cómo gestionarlo).

Cuando la aplicación se invoca mediante un URI personalizado, el objeto NativeApplication distribuye un evento invoke . La URL del vínculo, incluyendo parámetros de consulta, se ubica en el conjunto arguments del objeto InvokeEvent. Se puede usar cualquier número de filtros prácticos.

Nota: los vínculos de una instancia de StageWebView no pueden abrir direcciones URL que utilicen un esquema URI personalizado.

Filtro de compatibilidad con Android

El sistema operativo Android utiliza una serie de elementos en el archivo de manifiesto de la aplicación para determinar si la aplicación es compatible con un dispositivo concreto. La incorporación de esta información al archivo de manifiesto es opcional. Si no incluye estos elementos, la aplicación se puede instalar en cualquier dispositivo de Android. Sin embargo, puede que no funcione correctamente en cualquier dispositivo de Android. Por ejemplo, una aplicación de cámara no será útil en un teléfono que no disponga de cámara.

Etiquetas del archivo de manifiesto de Android que se pueden utilizar para filtro:

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk (en AIR 3+)

Aplicaciones de cámara

Si se solicita el permiso de cámara para la aplicación, Android asume que la aplicación requiere todas las funciones de cámara disponibles, incluyendo el enfoque y flash automáticos. Si la aplicación no requiere todas las funciones de cámara, o si la cámara es una función opcional, se deben establecer los distintos elementos uses-feature para la cámara con el fin de indicar que son opcionales. De lo contrario, los usuarios con dispositivos que carecen de una función o que no tienen cámara, no podrán encontrar la aplicación en Android Market.

En el siguiente ejemplo se muestra cómo solicitar permiso para la cámara y hacer que todas las funciones de cámara sean opcionales:

<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>

Aplicaciones de grabación de audio

Si se solicita permiso para grabar audio, Android también entiende que la aplicación requiere un micrófono. Si la grabación de audio es una función opcional de la aplicación, se puede añadir una etiqueta uses-feature para especificar que el micrófono no es necesario. De lo contrario, los usuarios con dispositivos que no disponen de micrófono no podrá localizar la aplicación en Android Market.

En el siguiente ejemplo se muestra cómo solicitar permiso para utilizar el micrófono muestras que el hardware del micrófono se hace opcional:

<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>

Ubicación de instalación

Se pude permitir que la aplicación se instale o se mueva a la tarjeta de memoria externa, estableciendo el atributo installLocation del elemento manifest de Android en auto o preferExternal :

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

El sistema operativo Android no garantiza que la aplicación se instalará en la memoria externa. Un usuario también puede mover la aplicación entre la memoria interna y externa utilizando la aplicación de configuración del sistema.

Aun instalada en la memoria externa, los datos de usuario y la caché de la aplicación como, por ejemplo, el contenido del directorio de almacenamiento de la aplicación, los objetos compartidos y los archivos temporales, aún se almacenan en la memoria interna. Para evitar el uso de demasiada memoria interna, sea selectivo respecto a los datos que se guardan en el directorio de almacenamiento de la aplicación. Las grandes cantidades de datos se deben guardar en SDCard utilizando las ubicaciones File.userDirectory o File.documentsDirectory (que ambas asignaciones en la raíz de la tarjeta SD en Android).

Activación de Flash Player y otros plug-ins en un objeto StageWebView

En Android 3.0+, una aplicación debe activar la aceleración por hardware en el elemento de la aplicación de Android para que el contenido del plug-in se visualice en un objeto StageWebView. Para activar el procesamiento mediante plugin, establezca el atributo android:hardwareAccelerated del elemento application en true :

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

Profundidad de color

En AIR 3 y versiones posteriores, el motor de ejecución establece la visualización con representación de colores de 32 bits. En versiones anteriores de AIR, el motor de ejecución utiliza colores de 16 bits. Puede hacer que el motor de ejecución utilice colores de 16 bits con el elemento <colorDepth> del descriptor de la aplicación:

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

Con profundidad de color de 16 bits se puede aumentar el rendimiento de procesamiento, pero a costa de la fidelidad de los colores.