ActionScript / AIR - 在运行时确定设备配置文件?

时间:2011-03-20 08:10:17

标签: actionscript-3 air matrix bitmap cache-control

我正在为桌面设备和移动设备开发应用程序,并希望为每个版本使用相同的代码库。

我想在我的某些显示对象上使用cacheAsBitmapMatrix,但cacheAsBitmapMatrix如果它包含在具有 mobileDevice 以外的设备配置文件的AIR应用程序中,则会引发错误或 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 for TV设备。   您可以在运行时测试支持   在桌面设备上使用   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 个答案:

答案 0 :(得分:2)

document指定不同配置文件的设备功能。由于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;
    }
}

获取当前个人资料可能是更清洁的解决方案,但我不知道该怎么做。另一个“想法”:使用上面的文档,测试功能并从结果中推断出配置文件,例如在Einstein riddle中:)

答案 1 :(得分:-2)

对于运行时检查您的应用程序是在移动设备上还是在Web上,您还可以使用“Capabilities.playerType”

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