Специальные API-интерфейсы ActionScript для мобильных устройств

Следующие API-интерфейсы доступны только в приложениях AIR на мобильных устройствах. В данный момент они не поддерживаются в Flash Player и в компьютерных версиях AIR.

API-интерфейс ориентации экрана

API-интерфейс ориентации экрана позволяет манипулировать ориентацией рабочей области и устройства iPhone:

  • Stage.autoOrients : указывает, настроено ли в программе автоматическое изменение ориентации при повороте устройства. Это свойство имеет значение true , когда в диалоговом окне «Настройки iPhone» во Flash Professional CS5 установлен флажок «Автоориентация». (Также можно задать элементу autoOrients значение true в файле дескриптора приложения.) См. раздел « Настройки приложения iPhone ». Чтобы отменить автоматическое изменение ориентации, нужно добавить прослушиватель события orientationChanging для объекта Stage. Вызов метода preventDefault() для этого объекта события отменяет автоматическое изменение ориентации.

    При использовании автоматической установки ориентации для получения наилучших результатов задайте для свойства align объекта Stage следующие значения:

    stage.align = StageAlign.TOP_LEFT; 
    stage.scaleMode = StageScaleMode.NO_SCALE;
  • Stage.deviceOrientation : физическая ориентация устройства. Класс StageOrientation определяет значения для этого свойства.

  • Stage.orientation : текущая ориентация рабочей области. Класс StageOrientation определяет значения для этого свойства.

  • Stage.supportsOrientationChange : имеет значение true в приложениях iPhone и false в приложениях AIR.

  • Stage.setOrientation() : устанавливает ориентацию рабочей области. У этого метода один параметр — строка, в которой определена ориентация рабочей области. Возможные значения параметра определяются постоянными класса StageOrientation.

  • StageOrientation: определяет значения для ориентации рабочей области. Например, StageOrientation.ROTATED_RIGHT означает, что рабочая область повернута вправо относительно ориентации по умолчанию.

  • StageOrientationEvent: определяет события, которые объект Stage отправляет при изменении ориентации экрана. Это событие происходит, когда пользователь поворачивает iPhone. Существует два типа событий. Объект Stage отправляет событие orientationChanging в процессе поворота устройства. Чтобы предотвратить изменение ориентации рабочей области, необходимо вызвать метод preventDefault() объекта события orientationChanging . Объект Stage отправляет событие orientationChange после завершения изменения ориентации.

В настоящее время API-интерфейс ориентации экрана применим только в приложениях AIR на мобильных устройствах. Если в программе AIR для мобильных устройств и в программе AIR для настольного компьютера используется один и тот же исходный код, задайте свойство Stage.supportsOrientationChange , чтобы проверить, поддерживается ли API-интерфейс.

В следующем примере показана реакция на поворот устройства:

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

В этом примере при изменении ориентации рабочей области вместо функционального кода использованы комментарии.

Изменить ориентацию рабочей области можно, вызвав метод setOrientation() объекта Stage. Установка ориентации является асинхронной операцией. Проверить завершение установки ориентации можно, прослушав событие orientationChange . Следующий код показывает способ установки для рабочей области правосторонней ориентации:

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

При повороте рабочей области изменяются ее размеры, и объект Stage отправляет событие resize . В ответ на событие resize можно изменять размер или местоположение экранных объектов на рабочей области.

NativeApplication.systemIdleMode и SystemIdleMode

Свойство NativeApplication.systemIdleMode запрещает iPhone переходить в режим ожидания. По умолчанию iPhone переходит в режим ожидания, если пользователь какое-то время не прикасается к сенсорному экрану. В режиме ожидания экран гаснет. Кроме того, iPhone при этом может перейти в режим блокировки. Для данного свойства можно установить одно из двух значений:

  • SystemIdleMode.NORMAL — iPhone следует обычной процедуре перехода в режим ожидания.

  • SystemIdleMode.KEEP_AWAKE — приложение запрещает iPhone переходить в режим ожидания.

Эта функциональность поддерживается только на мобильных устройствах. Она не поддерживается в программах AIR, выполняемых в настольных операционных системах. Если приложение предназначено для настольных платформ, свойство NativeApplication.systemIdleMode не играет роли.

Следующий код позволяет отключить режим ожидания на iPhone:

NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;

CameraRoll

Класс CameraRoll позволяет добавлять изображения в программу «Фотопленка» iPhone. Метод addBitmapData() добавляет изображение в программу «Фотопленка» устройства iPhone. У этого метода один параметр — bitmapData . Этот параметр представляет собой объект BitmapData, содержащий изображение, которое добавляется в программу «Фотопленка».

Функциональность CameraRoll поддерживается только на мобильных устройствах. Она не поддерживается в программах AIR, выполняемых в настольных операционных системах. Чтобы узнать во время выполнения, поддерживает ли ваше приложение функции класса CameraRoll, проверьте статическое свойство CameraRoll.supportsAddBitmapData .

После вызова метода addBitmapData() объект CameraRoll отправляет одно из следующих двух событий:

  • complete — операция успешно завершена.

  • error — возникла ошибка. Например, на iPhone оказалось недостаточно места для сохранения изображения.

Следующий код добавляет в программу «Фотопленка» изображение рабочей области (снимок экрана):

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

Свойство cacheAsBitmapMatrix — это объект Matrix, определяющий способ визуализации экранного объекта, если свойство cacheAsBitmap имеет значение true . Эта матрица используется приложением в качестве матрицы преобразования для визуализации растровой версии экранного объекта.

Когда задано свойство cacheAsBitmapMatrix , приложение сохраняет не экранную матрицу, а кэшированное растровое изображение, полученное с помощью этой матрицы. (Экранная матрица — это значение transform.concatenatedMatrix экранного объекта.) Если матрица не совпадает с экранной, растровое изображение масштабируется и вращается по мере необходимости.

Визуализация экранного объекта, для которого задано свойство cacheAsBitmapMatrix , выполняется только при изменении значения cacheAsBitmapMatrix . Растровое изображение масштабируется и вращается согласно размеру и ориентации экранной матрицы.

Свойство cacheAsBitmapMatrix ускоряет прежде всего визуализация, выполняеая за счет ресурсов графического процессора, однако и визуализация с использованием ЦП выполняется быстрее.

Примечание. Для применения аппаратного ускорения задайте для визуализации значение «Графический процессор» (во Flash Professional CS5 откройте диалоговое окно «Настройки iPhone» и перейдите на вкладку «Общие»). (Также можно задать свойству renderMode значение gpu в файле дескриптора приложения.)

Например, следующий код оперирует растровым представлением экранного объекта в неизмененном виде.

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

В этом коде растровое представление соответствует текущей визуализации.

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

Как правило, используется единичная матрица ( new Matrix() ) или суффиксы transform.concatenatedMatrix . Однако можно использовать и другую матрицу. Например, для загрузки в графический процессор другого растрового изображения можно применить уменьшенную матрицу. В показанном ниже примере используется матрица cacheAsBitmapMatrix , уменьшенная в 2 раза по осям x и y. Растровый объект, используемый графическим процессором, меньше, однако графический процессор адаптирует его размер согласно свойству transform.matrix экранного объекта:

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

В большинстве случаев следует выбирать матрицу, преобразующую экранный объект до размера, который будет использоваться в приложении. Например, если в приложении используется растровая версия спрайта, уменьшенная вполовину, матрицу следует тоже сделать вполовину меньше. Если спрайт в приложении будет больше своего исходного размера, используйте матрицу, увеличенную в соответствующее количество раз.

Размеры экранных объектов, для которых задано свойство cacheAsBitmapMatrix , не должны превышать 1020 х 1020 пикселей. Кроме того, суммарное количество пикселей всех экранных объектов, для которых задано свойство cacheAsBitmapMatrix , не должно превышать четыре миллиона.

При совместном использовании свойства cacheAsBitmapMatrix и аппаратного ускорения следует брать в расчет многие факторы. Важно понимать, для каких экранных объектов следует, а для каких не следует задавать это свойство. Важные сведения об использовании этого свойства см. в разделе « Аппаратное ускорение ».

Функция диагностики визуализации с использованием графического процессора позволяет проверить работу в отладочных версиях программы. Дополнительные сведения см. в разделе « Отладка приложения iPhone ».

Замечания о взаимодействии по сети

При использовании следующих схем URL-адресов с функцией nativigateToURL() документ открывается во внешнем приложении:

Схема URL-адресов

Результат вызова функции nativeToURL()

Пример

Адрес получателя mailto:

Открытие нового сообщения в приложении почтового клиента.

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

sms:

Открытие сообщения в приложении для обмена текстовыми сообщениями.

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

tel:

Набор номера телефона (после одобрения пользователем).

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

Приложение iPhone может полагаться на установленные самозаверенные корневые сертификаты для проверки подлинности сервера во время защищенной транзакции, например запроса https. Сервер должен отправлять не только сертификат листа, но и все промежуточные сертификаты, образующие связку с корневым сертификатом.