About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Feb

    23

    很多时候我们需要用到设备的唯一识别码。安卓系统获取设备唯一识别码的资料网上比较多,但它们也并不通用,因为现在市场上的很多安卓机实际上它们的系统都是经过设备厂商修改过的,比如小米的系统,阿里云OS手机系统等等,所以实际上并不存在一个真正通用的方法。以下这个方法仅适用于 iPhone / iPad 设备或桌面设备,并不适用于 Android 系统(原因在后面)。

    苹果设备的 “IDFA、IDFV、UDID、OpenUDID 等等”这些标识区别可以在百度上找到,这些标识除了真正的 UDID 和 MAC 物理地址之外,其它的标识在很多情况下是会发生变化的:最常见的情况就是还原出厂设置后,会生成一个新的标识符。网络上一些第三方能够获得 UDID 的 SDK,实际上都是 OpenUDID,并不是真正的 UDID。

    苹果公司政策规定开发者是不能够获取用户设备的物理信息的(在 iOS 4.x 时代是获取 UDID 和 MAC 物理地址的,后来的新系统中都开始禁止了访问这些信息)。如果利用核客技术访问私有 API 被审核人员发现,那么一定会遭到苹果公司拒审;既便上架了被发现也会被下架。

    重要的事情说三边

    1、苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!苹果公司政策规定不允许第三方开发者获取设备真正的唯一识别码!

    2、利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!利用核客技术或系统漏洞调用苹果私有 API 会拒和下架!

    3、利用任何标识符统计用户数据必须接受苹果公司审核!利用任何标识符统计用户数据必须接受苹果公司审核!利用任何标识符统计用户数据必须接受苹果公司审核!

    4、开发者不要仅研究技术,也要知晓各平台的政策!开发者不要仅研究技术,也要知晓各平台的政策!开发者不要仅研究技术,也要知晓各平台的政策!

    技巧

    同一时间是指精确到毫秒级的时间!目录与创建时间!!硬件磁盘根目录即文件目录!!!

    从理论上来说,我们可以在同一时间创建两个目录,但那仅仅是理论上的,所以标题中“唯一”两个字加了引号。两块闪存盘同时间被格式化完成?这个概率可能比两个目录的创建时间完全相同的机率还要低。

    代码

    import flash.filesystem.File;
    import flash.globalization.DateTimeFormatter;

    trace("硬件信息:");

    var rootDirArr:Array = File.getRootDirectories();

    for (var i:uint = 0; i < rootDirArr.length; i++) 
    {
        var file:File = rootDirArr[i];

        var date:Date = file.creationDate;

        var dtf:DateTimeFormatter = new DateTimeFormatter(LocaleID.DEFAULT);
            dtf.setDateTimePattern("yyyy/MM/dd HH:mm:ss");

        var creationTime:String = dtf.format(date);

        //看到最后的这个 milliseconds 值了吗
        trace(file.nativePath + ":" + creationTime + "," + date.milliseconds);
    }

    如果是在我的 Windows 7 中调试运行,它会显示(它并不需要系统管理员的权限就能读取):

    硬件信息:
    C:\:2009/07/14 10:38:56,526
    D:\:2010/08/23 23:59:31,18
    E:\:2010/08/23 23:59:46,99

    如果是在我的 iOS 9.2 (iPhone6 Plus)中运行,它会显示(不需要越狱):

    硬件信息:
    /:2015/06/25 17:47:25,10

    使用这个方法最大好处就是不需要 ANE 文件。既便用户在系统设置中还原位置与隐私、还原广告标示符、抹掉所有内容与设置、升级系统等,磁盘的创建时间都不会发生变化,既便用户完全重置系统,还原所有设置到出厂状态,磁盘的创建时间都不会发生变化。经过测试,只有在使用线刷 / 强制刷机的情况下,磁盘才会被重新创建并且格式化,磁盘的创建时间才会发生变化 

    额外的话题:关于 Android 系统

    然后,以上这个方法并不适用于 Android 系统,在 Adobe 官方的 API  手册中 getRootDirectories() 方法下面已经有说明:“在根不可读的文件系统上,例如 Android 文件系统,返回的 File 对象的属性并不总是反映真实值。例如,在 Android 上,spaceAvailable 属性报告 0。” 安卓系统可以使用原生的方式获取设备id,制作成 ANE 文件给 AS3 调用。但正如前面第一段所述的,既便是 Google 提供的 getDeviceId() 这个 API 并不通用,因为国内很多手机厂商对安卓系统进行了修改,很多权限都发生了改变。

    比如,在不使用 ANE 的情况下,在未经修改的安卓系统中,可以用如下方法读取 MAC 网卡地址。我在 HTC 手机中进行了测试,-app.xml 中的权限:

    <!--删除 android.permission.INTERNET 权限将导致无法调试设备上的应用程序-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--应同时切换 ACCESS_NETWORK_STATE 和 ACCESS_WIFI_STATE 权限,才能使用 AIR 的 NetworkInfo API-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    AS3:

    var netWorkVec:Vector.<NetworkInterface > = NetworkInfo.networkInfo.findInterfaces();

    for (var i:* in netWorkVec)
    {
        if(netWorkVec[i].hardwareAddress)
            trace("MAC 物理地址:",netWorkVec[i].hardwareAddress);
    }

    结果输出了:

    MAC 物理地址: D8:B3:77:7F:00:47

    但是,同样的代码,在国内厂商经过修改后的系统里,它并不能正常输出 MAC 网卡地址,比如使用阿里云OS的联想手机经过测试就不能。所以如果 AS3 的安卓开发者们想要一个通用的获取设备硬件信息的方法,几乎是不可能。

    Sep

    22

    1、准备一个纯文本文件,命令为 “txtcounter.txt” ,里面写一个数字“0”, 用它就可以当数据库了。

    2、准备一个 asp 文件,环境最简单,只需要一个 IIS 环境就可以了。asp 内容如下:

    <%
    CountFile=Server.MapPath("txtcounter.txt")
    Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
    Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
    counter=Out.ReadLine
    Out.Close
    SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
    Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
    Application.lock
    counter=counter + 1
    Out.WriteLine(counter)
    Application.unlock
    Response.Write"document.write("&counter&")"
    Out.Close
    %>

    3、AS 代码如下:

    var url:String = "http://www.[某个地址].com/count.asp";
    var request:URLRequest = new URLRequest(url);
    var variables:URLVariables = new URLVariables();
    variables.exampleSessionId = (new Date()).getTime();
    request.data = variables;
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.load(request);

    就这样,一个最简单的统计功能就搞定了。可以用于快速的实现临时计时、计数等功能。

    备注:txt  与 asp 文件保存时推荐使用 ANSI 编码。

    Jun

    3

    关闭 Flash CC 2014自动恢复功能

    • 0 Comments
    • Flash Platform

    自动恢复功能挺烦人,经常好不容易做好的资源文件被无缘无故的还回去了。以前 CS6 版本至少还提示一下是否使用还原功能,新版的 CC 则完全不提示,使得我的资源文件直接倒档好几次。

    编辑—首先参数—常规—自动恢复,对勾去掉。

    Mar

    15

    Flash IDE 批处理面板:BatchPane

    • 0 Comments
    • Flash Platform

    Flash IDE 用来制作可视化的素材和元件时非常方便,但当元件数量非常多的时候,如果需要重复的操作相同的过程,就会需要用到 *.jsfl,用这个 BatchPane 能更方便的运行 jsfl 代码。在新的 CC 版本中也测试过可以使用。

    下载地址201503151418017635.rar

    安方方法:新建一个 Flash JavaScript 文件,然后往里填" fl.trace(fl.configDirectory); ",得到一个文件夹路径,在该路径中找到 WindowSWF 的文件夹,然后将压缩包中的文件解压到 WindowSWF 目录后,重启 Flash IDE CS6,在“窗口—其它面板”(在 CC 版本中它会显示在“窗口—扩展”菜单里)中可以打开它,然后就可以开始写屌爆的 jsfl 代码了。 

    原文链接http://bbs.9ria.com/thread-169382-1-1.html

    Dec

    2

    利用 Flash 的 DisplacementMapFilter 置换图像滤镜,可以制作鱼眼镜头的效果,可以用来模放大镜、缩小镜、以及立体的球状效果等。

    如果球状效果足够大,还可以用来模拟一种鱼眼效果的 360 度旋转,边缘产生拉伸的效果(下面提供的代码仅供参考,如果想制作 360 度旋转效果,需使用 3D 引擎,原因见后面的备注说明部份)

    源码下载(AS3 Flash CS6 格式) 鱼眼.rar             

    源码下载(AS2 Flash8 旧版格式)mapping09.zip

    通过置换滤镜模拟 360 度旋转(Flash CS6 格式):通过置换滤镜模拟鱼眼镜360度旋转.rar

    备注说明:因为 Flash 的滤镜是比较占用系统资源的,所以如果大面积的使用滤镜是不被推荐的(在面积特别大的时候它,FlashPlayer 本身也会强制禁用滤镜,调试器中会给出类似这样的警告: 滤镜将不进行呈现。DisplayObject 的应用了滤镜的尺寸(XXX,YYY)过大,无法绘制)。

    Nov

    14

    Adobe Flash Builder 4.7 下载地址

    • 0 Comments
    • Miscellaneous
    挺烦那个 Adobe Creative Cloud SetUp 程序的,搞捆绑式安装,被强制安装了 Cloud 也罢,还特么的下载特别慢,搞的电脑也特别卡,还是用迅雷直接下载比较爽:
     
    32 bit:http://trials3.adobe.com/AdobeProducts/FLBR/4_7/win32/FlashBuilder_4_7_LS10.exe
     
    64 bit:http://trials3.adobe.com/AdobeProducts/FLBR/4_7/win64/FlashBuilder_4_7_LS10_win64.exe

    Aug

    9

    一个 AS3 的二维码生成和解析类,支持中文生成和解析。

    本地下载QR二维码生成和解析forAS3.rar

    May

    23

    Adobe Scout 相关资料

    • 0 Comments
    • Flash Platform

    May

    9

    在大多数情况下,在让 DIV 的层浮动时,普通的 DIV 层是会自动插入到浮动层的下面,如下样例代码可能网页美工都很熟悉:

    <div id="div1" style="width:100px;height:100px;background-color:red;float:left;">这是一个浮动的DIV1层</div>
    <div id="div2" style="width:100%;height:100%;background-color:gray;">这是一个普通的DIV2层,显示在了DIV1下面</div>

    但涉及到 Flash 影片元素作为网页内容时,它与其它的 DIV 层往往会有一些奇葩的问题,导致 DIV 层被 Flash 遮挡。解决方法如下:

    第一步:设置 HTML 包装器中 wmode 属性值为 opaque(关于 wmode 的详细介绍参考《Flash HTML 包装器中 wmode 属性详解》):

    <object id='flashObject' ....>
        <param ....>
        <param name='wmode' value='opaque'>
        <embed ... wmode='opaque'>
        </embed>
    </object>

    第二步:设置被遮挡对象的 z-index 值(z-index 必须结合定位元素使用,否则是无效的,例如 position:absolute;,关于 z-index详细介绍参考《CSS z-index 属性》):

    /*
    浮动的 DIV 层 z-index 比 Flash 文件的的大
    并且需结合定位元素如 position,top,left等相关元素
    */

    #flashContent { 
        width:500px
        height:500px;
        z-index:1;
    }
    #divFloat{
        width:100px;
        height:100px;
        background-color:red;
        float:left;
        position:absolute;
        z-index:9999;
        top:0px;
        left:0px;
    }

    当 Flash 作为网页元素一部份被放在 HTML 显示时情况往往有可能是很复杂的,比如当一个 DIV 代码片段置于 Flash 影片代码之后,仅设置 position 与 z-index 可能会造成 DIV 布局定位不准确的情况,所以上面将可能遇到的几个属性值如 top 与 left 也列举进去了。

    More...

    May

    9

    wmode 属性值表示 Flash 文件插入到 HTML 页面中时窗口模式,允许取“window”、“opaque ”、“transparent”三个值中任意一个:
     
    Window 模式
    这是 wmode 的缺省值,如果网页中没有填写 wmode 属性值,那么默认情况下就是这种显示模式。在这种模式下 FlashPlayer 有独立的 Windows 的窗口句柄,是作为浏览器的一个子窗口被嵌入在浏览器中(在所有网页元素的上面),这是 Flash 最快的渲染模式。由于他是独立于浏览器的并且在所有网页元素上面,所以其它元素的 CSS 设置 z-index 无论有多大,都不会显示在 Flash 窗口上面。
     
    Opaque 模式
    这是一种将 Flash 作为网页元素的一部份显示的无窗口模式,在这种情况下 FlashPlayer 没有独立的窗口句柄。在这种模式下它的性能会稍低于 Windows 模式,但绝大多数情况下并不会造成性能问题。因为它属于网页元素的一部份,所以开发者就可以使用 z-index 值来控制 Flash 在网页中的层级深度。
     
    Transparent 模式
    透明模式,同样它会将 Flash 文件作为网页元素的一部份显示。在这种模式下 FlashPlayer 会将 Flash 文件的舞台背景变成透明不可见,如果 Flash 中没有任何元素遮挡网页上的其它元素,那么网页上的其它元素就可以透过 Flash 显示出来。同样开发者也可以使用 z-index 来控制 Flash 在网页中的层级深度,但是与 Opaque 模式不同的是它可能会造成性能问题,因为这样它需要同时刷新 Flash 中的动画和网页元素同步,会大大降低 Flash 影片的播放速度,所以只适合一些非常简单的小动画。