About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jun

    28

    升级 iTunes 几天后,发现 FlashBuilder 4.7 在真机调试时 AIR SDK 找不到设备,显示“Flash Bulider找不到连接的设备”。像上次一样 CMD 命令行中输入(啊~,我为什么要说像上次一样):

    <Flash Builder 4.7 Program Files>\eclipse\plugins\com.adobe.flash.compiler_4.7.0.348297\AIRSDK\lib\aot\bin\iOSBin\idb.exe -devices

    提示:

    iTunes MobileDevice library not found.Please check your iTunes installation.

    Google 之,找到“iTunes 12.1.2(Windows 版)(64 位,适用于较早的显卡)”,下载,安装,搞定。

    备注:具体原因不清楚,但可以肯定不是因为显卡原因,因为刚一开始自动升级 iTunes 12.1.2 版本后的几天是可以真机调试的,过了几天才不能真机调试。

    Jun

    26

    继续《Adobe AIR 读取屏幕物理点数(非物理尺寸、非像素尺寸)的方法》,如果不使用 StageWebViewBridge-master,这里提供一个通过 StageWebView 获取 iOS 屏幕物理点数的样例代码(如果是安卓系统,可以直接用那篇文章中引用的官方推荐值 DPI 值 160)。

    JS 部份主要代码:

    package
    {
        public class ScreenJS
        {
            public function ScreenJS()
            {
                throw Error("无法实例化的类")
            }

            //这是一个奇怪的字符串写法
            //可以参考这个贴子:http://blog.zinewow.com/post/270.html
            //这样写的目的只是为了方便字符串在AS中换行
            static public const xmlString:String =

            (<![CDATA[
                <script type="text/javascript">

                    function getInfo() 
                    {
                        var u = navigator.userAgent;


                        if(u.indexOf('iPhone') > -1 || u.indexOf('iPad') > -1)
                        {
                            window.location.href = "http://127.0.0.1/?" + window.screen.height + "x" + window.screen.width;
                        }
                    }     

                    getInfo() ;

                </script>
            ]]>);
        }
    }

    AS 部份主要代码:

    //某个地方生成了 StageWebView 对象并添加了侦听器,一般就要主函数吧
    var view:StageWebView = new StageWebView();

    view.stage = stage;
    view.addEventListener(LocationChangeEvent.LOCATION_CHANGING, locationChaningHandler);
    view.loadString(ScreenJS.xmlString);


    //侦听器函数
    private function locationChaningHandler(e:LocationChangeEvent):void
    {
          e.preventDefault();//我们并不是为了跳转网页,所以这里中止跳转

          var location:String = e.location;
          var dpi:String= String(location.split("?")[1]);
          trace("dpi:", dpi);
    }

    Jun

    25

    BlackBerry PlayBook SDK for Adobe AIR

    • 0 Comments
    • Flash Platform

    在找资料的时候发现黑莓曾经居然为 ADOBE AIR 移动开发做过独立的组件:

    https://developer.blackberry.com/playbook/air/apis/qnx/ui/listClasses/package-detail.html

    Jun

    24

    将 APP 制作成为横向的应用,在 -app.xml 中设置 aspectRatio 为 landscape,并禁止它的旋转功能 autoOrients 为 false,通过 StageWebView 调用 JS 读取屏幕的宽与高。时此 JS 返回的仍然是垂直时 APP 的屏幕物理点数(关于物理点数,请参考这里),并非是旋转后屏幕的物理点数(与 stage 方向并不一致,不知道这算不算 Bug)。

    以 iPad AIR 为例:

    读取屏幕:alert(window.screen.height + " x " + window.screen.width);

    向的 APP 得到的物理点数并非  768 x 1024,而是1024 x 768(依旧是垂直方向的物理点数)。

    Jun

    24

    LabelItemRenderer 的文本在通过 setStyle 方法设置 fontFamily 时如果提供的是中文或日文,并不一定能按 Font 类的 fontName 来正确显示样式。

    推荐使用自定义 ItemRenderer 类,内部放入一个比较重量级 spark 的 Label 组件(因为移动开发时不支持 mx 组件,所以只能退而求其次选 spark 了)。这样就能通过 fontFamily 正确的显示所有非英文字体的样式了。

    Jun

    20

    物理尺寸单位一般用英寸表示,比如 iphone4s 为 3.5 英寸。像素尺寸单位一般就直接以像素表示,比如 iphone4s 屏幕分辨率为 640 像素 x 960 像素,一般用 PP 表示。物理点数(有些人称它为逻辑分辨率,也有些人称它为设备独立像素)一般用 DP 表示,比如 IPHONE 4S 与 3GS 有相同的物理点数都是320 x 480,但 4S 拥有不同的像素尺寸 640 x960。

    AS 可以有不少类的 API 都可以获取屏幕的像素分辨率尺寸,然后可以通过 Capabilities 类的 screenDPI 属性计算出一个设备屏幕的物理尺寸。但 AS 并没有提供任何属性或方法可以获取屏幕的物理点数。虽然 screenDPI  看上去像是获取每英寸内的 DP  值,但实际上它获取的是每英寸内 PP 值。

    如果使用 FeathersUI 的话,它里面提供了 DeviceCapabilities 类,能更方便的获取物理尺寸,但依然是不能获取物理点数的。

    Adobe 官方的博客有一节专门讲解了 “Calculating physical dimensions”:

    Looking at the dots-per-inch (more properly called PPI or pixels-per-inch), you can estimate how big your interface should be to avoid fat-finger mistakes. Apple suggests the minimum size for buttons and interactive objects should be 44 x 44 pixels for a 163 dpi screen (for example, an iPhone 3GS).

    Android uses the concept of density-independent pixels (dp), which is a normalized pixel unit for defining resolution compared to a 160 dpi screen. A device's dp is calculated as pixels * 160 / DPI. To determine the dpi, dp, and size in inches you can use the following code:

    Adobe 官方指出苹果公司推荐的 DPI 值是 160(实际是163,注意这个不是 Capabilities 里面 screenDPI 值,因为 screenDPI 实际是一个 PPI 值),但实际测试发现这个值在 IPHONE 上算出正确结果,但 PAD 上是完全错误的,所以这并没有什么卵用。

    移动版本的 AIR 并不支持 HTMLLoader 类,既便支持也不会有什么卵用,因为它使用的是 AIR Web 控件,所以读到的 99% 依然会是像素尺寸,不会是物理点数(因为不支持 HTMLLoader,所以我猜的)。

    但 AIR 支持 StageWebView ,它实际上调用的是系统原生的 Web 控件,而 Web 控件可以运行 JS,所以可以通过它来获取系统更多的信息。

    var swv:StageWebView = new StageWebView();
    swv.loadString('<script>function getInfo() {alert(window.screen.width + "x" + window.screen.height)} getInfo();</script>');

    现在可以很轻松的获得屏幕的物理点数了,但 StageWebView 中的 JS 是不能直接与 AS 交互的,所以要通过 location 来传递参数,但使用起来会比较不方便。推荐使用 StageWebViewBridge-master,它已经很好的包装了这个 location 属性,可以很方便的让 JS 与 AS 之间的通信。

    如果不知道 StageWebViewBridge 如何使用,这里有篇中文资料:http://bbs.9ria.com/thread-418243-1-1.html

    Jun

    20

    使用 StageWebViewBridge 时如果报以下错误:

    ReferenceError: Can't find variable: StageWebViewBridge

    是因为在 HTML 中找不到 StageWebViewDisk 类正则匹配的以下字符串:

    contents = contents.replace( _headRegexp, '<head><script type="text/javascript">' + JSCODE + '</script>' );

    需要注意这个匹配,或者自己修改:

    <head><script type="text/javascript">。。。。。。。。</script>

    无论是使用 loadString 或 loadURL,被加载的内容里面要包含这个匹配。

    Jun

    19

    Adobe AIR 开发者自定义 URL schema

    • 0 Comments
    • Flash Platform

    什么是 URL schema?举个例子:有两个 APP,想要在其中一个 APP 去打开另一个 APP,并给另一个 APP 启动时传入参数,这时候就要用到 URL schema。

    Adobe AIR 开发者可以自定义应用的 URL schema,定义方法参考官方提供的帮助文档:

    iOS 版:http://help.adobe.com/zh_CN/air/build/WSfffb011ac560372f7e64a7f12cd2dd1867-8000.html#WS901d38e593cd1bac354f4f7b12e260e3e67-8000

    安卓版:http://help.adobe.com/zh_CN/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffc.html#WS2d929364fa0b81373f2c6cba12a3522f10c-8000

    其中传入参数需要应用侦听 InvokeEvent 事件

    Jun

    19

     

    一般苹果官方的叫法就是Team ID 和 Bundle ID,Team ID + Bundle ID = APP Stroe ID(很多开发者也简称它为 APP ID,还有一些更懒的开发者更简单的称它为 ID),其中很多开发者也称 Team ID 为 ID 的前缀(因为官方在审请一个应用标识符后,写的 Prefix 就是 Team ID),所以 Bundle ID 也被一些开发者称为 ID 的后缀。

    Jun

    16

    之前用 AIR SDK 16 时一直正常,说明驱动正常。昨天升级了一下 AIR SDK 到 18 版本后真机调试显示“Flash Bulider找不到连接的设备”。CMD 命令行中输入:

    <Flash Builder 4.7 Program Files>\eclipse\plugins\com.adobe.flash.compiler_4.7.0.348297\AIRSDK\lib\aot\bin\iOSBin\idb.exe -devices

    提示:

    iTunes MobileDevice library not found.Please ensure iTunes version 12.1.0.71 or greater is installed.

    升级 iTunes 至最新版本,搞定。