API de ActionScript específicas de aplicaciones de AIR móviles

Las siguientes API sólo están disponibles en aplicaciones de AIR para dispositivos móviles. Actualmente, no son funcionales en Flash Player ni en versiones de escritorio de AIR.

API de orientación de pantalla

La API de orientación de pantalla permite trabajar con la orientación del escenario y el iPhone:

  • Stage.autoOrients : si la aplicación está definida para que el escenario se reoriente automáticamente cuando el dispositivo se gira. Esta propiedad se establece en true si la opción Orientación automática está seleccionada en el cuadro de diálogo Configuración de iPhone de Flash Professional CS5. (También puede establecer el elemento autoOrients como true en el archivo descriptor de la aplicación.) Consulte la sección Configuración de aplicaciones para iPhone . Se puede cancelar la reorientación automática añadiendo un detector de eventos orientationChanging para el objeto Stage. Llamar al método preventDefault() de este objeto de evento cancela la reorientación automática.

    Si utiliza la orientación automática, para obtener los mejores resultados, establezca la propiedad align de Stage en lo siguiente:

    stage.align = StageAlign.TOP_LEFT; 
    stage.scaleMode = StageScaleMode.NO_SCALE;
  • Stage.deviceOrientation : la orientación física del dispositivo. La clase StageOrientation define valores para esta propiedad.

  • Stage.orientation : la orientación actual del escenario. La clase StageOrientation define valores para esta propiedad.

  • Stage.supportsOrientationChange : establezca este elemento como true en el iPhone y como false en una aplicación de AIR.

  • Stage.setOrientation() : establece la orientación del escenario. Este método tiene un parámetro que es una cadena que define la nueva orientación del escenario. Las constantes de la clase StageOrientation definen posibles valores para el parámetro.

  • StageOrientation: define valores de orientación del escenario. Por ejemplo, StageOrientation.ROTATED_RIGHT indica un escenario girado a la derecha con relación a la orientación predeterminada del dispositivo.

  • StageOrientationEvent: define eventos distribuidos por el objeto Stage cuando cambia la orientación de la pantalla. Este evento tiene lugar cuando el usuario gira el iPhone. Existen dos tipos de eventos. El objeto Stage distribuye el evento orientationChanging mientras el dispositivo está girando. Para impedir que el escenario cambie de orientación, llame al método preventDefault() del objeto de evento orientationChanging . El objeto Stage distribuye el evento orientationChange una vez completada la reorientación del escenario.

Actualmente, la API de orientación de pantalla sólo resulta útil en aplicaciones de AIR para dispositivos móviles. Si una aplicación de AIR móvil y una aplicación de AIR de escritorio comparten código fuente, utilice la propiedad Stage.supportsOrientationChange para comprobar si se admite la API.

El siguiente ejemplo muestra cómo responder cuando el usuario gira el dispositivo:

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, 
            onOrientationChange); 
 
function onOrientationChange(event:StageOrientationEvent):void 
{ 
    switch (event.afterOrientation) { 
        case StageOrientation.DEFAULT: 
            // re-orient display objects based on 
            // the default (right-side up) orientation. 
            break; 
        case StageOrientation.ROTATED_RIGHT: 
            // Re-orient display objects based on 
            // right-hand orientation. 
            break; 
        case StageOrientation.ROTATED_LEFT: 
            // Re-orient display objects based on 
            // left-hand orientation. 
            break; 
        case StageOrientation.UPSIDE_DOWN: 
            // Re-orient display objects based on 
            // upside-down orientation. 
            break; 
}

En este ejemplo, en caso de orientaciones distintas del escenario, se proporcionan comentarios en vez de código funcional.

Puede cambiar la orientación del escenario llamando al método setOrientation() del objeto Stage. Definir la orientación es una operación asíncrona. Puede comprobar cuándo finaliza la orientación si detecta el evento orientationChange . El siguiente código muestra cómo establecer el escenario con la orientación a la derecha:

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, 
            onOrientationChange); 
stage.setOrientation(StageOrientation.ROTATED_RIGHT); 
 
function onOrientationChange(event:StageOrientationEvent):void 
{ 
    // Code to handle the new Stage orientation 
}

A medida que el escenario cambia de tamaño y gira, el objeto Stage distribuye un evento resize . Puede cambiar el tamaño y la posición de los objetos de visualización del escenario como respuesta al evento resize .

NativeApplication.systemIdleMode y SystemIdleMode

La propiedad NativeApplication.systemIdleMode permite impedir que el iPhone pase al modo de inactividad. De forma predeterminada, un iPhone pasa al modo de inactividad si no hay interacción con la pantalla táctil durante un periodo determinado. El modo de inactividad puede hacer que la iluminación de la pantalla disminuya. También puede hacer que el iPhone pase al modo de bloqueo. Esta propiedad se puede establecer en uno de los dos siguientes valores:

  • SystemIdleMode.NORMAL : el iPhone sigue el comportamiento normal del modo de inactividad.

  • SystemIdleMode.KEEP_AWAKE : la aplicación intenta impedir que el iPhone pase al modo de inactividad.

Esta funcionalidad sólo se admite en dispositivos móviles. No se admite en aplicaciones de AIR ejecutadas en sistemas operativos de escritorio. En una aplicación ejecutada en el escritorio, establecer la propiedad NativeApplication.systemIdleMode no surte ningún efecto.

El siguiente código muestra cómo desactivar el modo de inactividad del iPhone:

NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;

CameraRoll

La clase CameraRoll permite añadir una imagen al Carrete del iPhone. El método addBitmapData() añade una imagen al Carrete del iPhone. El método tiene un parámetro: bitmapData . Este parámetro es el objeto BitmapData que contiene la imagen que se añade al Carrete.

La funcionalidad de CameraRoll sólo se admite en dispositivos móviles. No se admite en aplicaciones de AIR ejecutadas en sistemas operativos de escritorio. Para comprobar en tiempo de ejecución si su aplicación admite la funcionalidad CameraRoll, compruebe la propiedad estática CameraRoll.supportsAddBitmapData .

Tras llamar al método addBitmapData() , el objeto CameraRoll distribuye uno de estos dos eventos:

  • complete : la operación se ha completado correctamente.

  • error : se ha producido un error. Por ejemplo, tal vez no quede espacio libre suficiente en el iPhone para guardar la imagen.

El siguiente código añade una imagen del escenario (captura de pantalla) al Carrete:

if (CameraRoll.supportsAddBitmapData) 
{ 
    var cameraRoll:CameraRoll = new CameraRoll(); 
    cameraRoll.addEventListener(ErrorEvent.ERROR, onCrError); 
    cameraRoll.addEventListener(Event.COMPLETE, onCrComplete); 
    var bitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight); 
    bitmapData.draw(stage); 
    cameraRoll.addBitmapData(bitmapData); 
} 
else 
{ 
    trace("not supported."); 
} 
 
function onCrError(event:ErrorEvent):void 
{ 
    // Notify user. 
} 
 
function onCrComplete(event:Event):void 
{ 
    // Notify user. 
}

DisplayObject.cacheAsBitmapMatrix

La propiedad cacheAsBitmapMatrix es un objeto Matrix que define cómo se procesa un objeto de visualización cuando cacheAsBitmap se establece en true . La aplicación utiliza esta matriz como una matriz de transformación para procesar la versión de mapa de bits del objeto de visualización.

Con cacheAsBitmapMatrix establecida, la aplicación conserva una imagen de mapa de bits en caché procesada con la matriz pero sin visualizarla. (La matriz de visualización es el valor de transform.concatenatedMatrix en el objeto de visualización.) Si esta matriz no coincide con la matriz de visualización, el mapa de bits se escala y se gira si es necesario.

Un objeto de visualización con cacheAsBitmapMatrix establecida sólo se procesa cuando cambia el valor de cacheAsBitmapMatrix . El mapa de bits se escala o se gira según sea necesario para ajustarse a la matriz de visualización.

Tanto el procesamiento basado en CPU como el basado en GPU se benefician del uso de la propiedad cacheAsBitmapMatrix , aunque el procesamiento con GPU suele hacerlo en mayor medida.

Nota: para usar la aceleración de hardware, establezca Procesamiento en GPU en la ficha General del cuadro de diálogo Configuración de iPhone en Flash Professional CS5. (O establezca la propiedad renderMode en gpu en el archivo descriptor de la aplicación.)

Por ejemplo, el siguiente código utiliza una representación de mapa de bits no transformada del objeto de visualización:

matrix:Matrix = new Matrix(); // creates an identity matrix 
mySprite.cacheAsBitmapMatrix = matrix; 
mySprite.cacheAsBitmap = true;

El siguiente código utiliza una representación de mapa de bits que coincide con el procesamiento actual:

mySprite.cacheAsBitmapMatrix = mySprite.transform.concatenatedMatrix; 
mySprite.cacheAsBitmap = true;

Normalmente, basta con la matriz de identidad ( new Matrix() ) o transform.concatenatedMatrix . Sin embargo, puede utilizar otra matriz (una con menor escala, por ejemplo) para cargar un mapa de bits distinto a la GPU. En el siguiente ejemplo, se aplica una matriz cacheAsBitmapMatrix escalada 0,5 en el eje x e y. El objeto de mapa de bits utilizado por la GPU es más pequeño, sin embargo la GPU ajusta su tamaño para coincidir con la propiedad transform.matrix del objeto de visualización:

matrix:Matrix = new Matrix(); // creates an identity matrix 
matrix.scale(0.5, 0.5); // scales the matrix 
mySprite.cacheAsBitmapMatrix = matrix; 
mySprite.cacheAsBitmap = true;

Generalmente, se elige una matriz que se adapte al tamaño del objeto de visualización que aparecerá en la aplicación. Por ejemplo, si la aplicación muestra una versión de mapa de bits del elemento Sprite con la escala reducida a la mitad, utilice una matriz que reduzca su escala también a la mitad. Si la aplicación mostrará el elemento Sprite más grande que sus dimensiones actuales, utilice una matriz que aumente su escala en la misma proporción.

Existe un límite práctico asociado al tamaño de los objetos de visualización para el que se establece la propiedad cacheAsBitmapMatrix . El límite es 1.020 por 1.020 píxeles. Existe un límite práctico para el número total de píxeles de todos los objetos de visualización para los que se establece la propiedad cacheAsBitmapMatrix . El límite es de unos cuatro millones de píxeles.

Hay diversas consideraciones que deben tenerse en cuenta a la hora de utilizar cacheAsBitmapMatrix y la aceleración de hardware. Es importante saber qué objetos de visualización deben tener dicha propiedad establecida y cuáles no. Para obtener información importante sobre el uso de esta propiedad, consulte Aceleración de hardware .

Puede utilizar la función de diagnóstico de procesamiento de GPU para diagnosticar el uso de GPU en versiones de depuración de la aplicación. Para obtener más información, consulte Depuración de una aplicación para iPhone .

Notas de red

Si usa los siguientes esquemas de URL con la función nativigateToURL() hace que se abra un documento en una aplicación externa:

Esquema de URL

Resultado de llamar a nativeToURL()

Ejemplo

mailto:

Abre un nuevo mensaje en la aplicación de correo.

str = "mailto:test@example.com"; 
var urlReq:URLReq = new URLRequest(str); 
navigateToURL(urlReq);

sms:

Abre un mensaje en la aplicación de mensajes de texto.

str = "sms:1-415-555-1212"; 
var urlReq:URLReq = new URLRequest(str); 
navigateToURL(urlReq);

tel:

Marca el número de teléfono en el teléfono (previa aprobación del usuario).

str = "tel:1-415-555-1212"; 
var urlReq:URLReq = new URLRequest(str); 
navigateToURL(urlReq);

Una aplicación para iPhone puede basarse en certificados raíz autofirmados ya instalados para la autenticación en el servidor durante una transacción segura, como una petición https. Un servidor debería enviar no sólo un certificado hoja, sino también todos los certificados intermedios que encadenan con el certificado raíz.