ActionScript / AIR - определить профиль устройства во время выполнения? - PullRequest
3 голосов
/ 20 марта 2011

Я занимаюсь разработкой приложения для настольных и мобильных устройств и хотел бы использовать одну и ту же кодовую базу для каждой сборки.

Я хочу использовать cacheAsBitmapMatrix на некоторых моих экранных объектах, но cacheAsBitmapMatrix выдает ошибку, если он включен в приложение AIR с профилем устройства, отличным от mobileDevice или extendedMobileDevice .

было бы идеально что-то вроде следующего:

if (cacheAsBitmapMatrix.isSupported)
   myDisplayObject.cacheAsBitmapMatrix = new Matrix();

обновить с помощью try / catch:

try                {myDisplayObject.cacheAsBitmapMatrix = new Matrix();}
catch(error:Error) {}
finally            {myDisplayObject.cacheAsBitmap = true;}

обновление:

за исключением телевизионных профилей, это должно также работать, чтобы различать мобильные и настольные системы:

//Resoslve Profile
if  (Capabilities.os.indexOf("Windows") > -1 || Capabilities.os.indexOf("Mac") > -1 || Capabilities.os.indexOf("Linux") > -1)
    trace("Desktop Profile");
    else
    trace("Mobile Profile");

обновление 2:

это кажется самым простым способом, и, возможно, наиболее распространенным способом определения профиля во время выполнения является вызов:

NativeWindow.isSupported;

из flash.display.NativeWindow документация:

Поддержка профиля AIR: эта функция поддерживается на всех рабочих столах системы, но не поддерживается на мобильные устройства или AIR для телевизионных устройств. Вы можете проверить поддержку во время выполнения на настольных устройствах, использующих Свойство NativeWindow.isSupported. Увидеть Поддержка AIR Profile для более информация о поддержке API по нескольким профилям.

обновление 3:

при тестировании на симуляторе BlackBerry PlayBook была поддержана NativeWindow. Я не проверял это на устройстве, чтобы узнать, поддерживается ли оно только на симуляторе или нет. С тех пор я начал использовать следующее, чтобы определить разницу между мобильными и настольными профилями:

if  (
    (Capabilities.os.toLowerCase().indexOf("mac") == -1) &&
    (Capabilities.os.toLowerCase().indexOf("windows") == -1) &&
    (Capabilities.os.toLowerCase().indexOf("linux") == -1)
    )
    deviceIsMobile = true;

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Этот документ определяет возможности устройства для различных профилей.Поскольку cacheAsBitmapMatrix не имеет получателя доступности, вам нужно проверить его один раз.Это должно быть легко сделать с блоком try / catch.

Редактировать: Я попытаюсь проиллюстрировать, что я имел в виду под "проверить один раз":

public class Capabilities2
{
    private static var cacheAsBitmapMatrixChecked:Boolean;
    private static var cacheAsBitmapMatrixStatus:Boolean;

    public static function get cacheAsBitmapMatrixIsSupported():Boolean
    {
        if (cacheAsBitmapMatrixChecked) return cacheAsBitmapMatrixStatus;
        var test:Sprite = new Sprite();
        try
        {
            text.cacheAsBitmapMatrix = new Matrix();
            cacheAsBitmapMatrixStatus = true;
        }
        catch (error:Error)
        {
            cacheAsBitmapMatrixStatus = false;
        }
        cacheAsBitmapMatrixChecked = true;
        return cacheAsBitmapMatrixStatus;
    }
}

Получить текущий профиль может быть более чистым решением, но я не знаю, как это сделать.Еще одна «идея»: использовать документ, описанный выше, тестировать возможности и выводить профиль из результатов, как в Загадка Эйнштейна :)

0 голосов
/ 23 июля 2013

Для проверки времени выполнения, если ваше приложение на мобильном или в Интернете, вы также можете использовать «Capabilities.playerType»

if (Capabilities.playerType == "Desktop") {
    trace ("running on mobile");                
}
else {
    trace ("running on web");
}
...