zoukankan      html  css  js  c++  java
  • 使用air进行移动app开发常见功能和问题(一)

    1、  获取最近联系人

    思路:侦听Geolocation的update事件,获取经度和纬度信息,再把坐标信息上传至服务器,服务器比较坐标信息算出距离,返回最近位置的若干个人。

    update时间在2种情况下会触发,一是gps,二是网络位置服务,这都要求手机里面必须开一个。注意gps在室内一般都没有信号。

    部分开放平台已经开放相关api,服务器部分可不用自己写,研究下现有的开放api。

    2、遍历文件夹里面的所有文件

    [javascript] view plaincopy
     
    1. var file:File =File.applicationDirectory.resolvePath("guessing");  
    2. this.pop(file);  
    3.    
    4. private  functionpop(file:File): void    
    5. {   
    6.          if(file.isDirectory)   
    7.          { //指示是否为对目录的引用。如果 File 对象指向一个目录,则该值为 true;否则为 false    
    8.                    vararr:Array=file.getDirectoryListing();//getDirectoryListing()返回与此 File 对象表示的目录下的文件和目录对应的 File 对象的数组。此方法不浏览子目录的内容。     
    9.                    for  each(var file:File in arr){ //File 对象表示文件或目录的路径(既可以是文件也可以是路径)    
    10.                             if(!file.isDirectory)   
    11.                             {   
    12.                                      trace(file.nativePath,file.url)  
    13.                                       
    14.                             }else    
    15.                             {   
    16.                                      pop(file);   
    17.                             }   
    18.                    }   
    19.          }   
    20. }  

    如果想自选目录,用这样浏览,并侦听选择事件:

    [javascript] view plaincopy
     
    1. file.browseForDirectory("请选择一个目录" );  
    2. file.addEventListener(Event.SELECT,onSingleSelect);   


     

    3、Embed绑定任意类型文件

    flex sdk Embed文件时会强制检测类型,例如jpg文件直接把扩展名改成swf,embed到代码中就会报 java.lang.NullPointerException错误

    绑定文件的方法:

    [Embed(source="asset.swf", symbol="swf中某个元件的类名",mimeType="类型")]

    public var img01:Class;

    如果要绑定特定的文件类型,指定mimeType,如果不配置mimeType,则会强制检测类型,并根据扩展名认定mimeType类型

    [Embed(source="guessing/face/1.swf",mimeType="application/octet-stream")]

    绑定任意类型文件设置mimeType=application/octet-stream,这样以二进制方式加载绑定文件,new出来后就是byteArray。

    4、air加载远程文件

    移动平台air 不论是android平台还是ios平台,都支持加载远程文件,但会有安全域问题

    错误:

    Error #2044: Unhandled IOErrorEvent:.text=Error #2036: Load Never Completed.

    需要在服务器网站根目录下下配置crossdomain.xml 设置domain="*",允许所有外部请求。

    特殊情况,如果服务器有防外链限制,则会报错,比如请求腾讯cdn文件,as项目就能正常加载,放air项目就不行,报Error #2044: Unhandled IOErrorEvent:. 

    5、发布apk文件失败

    把很多零散文件打包成apk时,很容易出错,测试5千个文件,一直打包失败。解决方法是把零散小文件批量embed成一个素材包再进行apk打包。

    发布apk时打包文件一定不要漏了文件,因为调试起来很麻烦,查找问题很不方便。

    6、开发多个版本解决方案

    如果想一个版本同时支持手机版、web版,甚至ios版,逻辑代码基本一样,只是UI不同,这是如果项目完全独立开发,可能维护成本比较高,建议采用一个版本的方式开发维护。

    思路:程序代码用一份,UI分开,分别配置几个不同的工程区调用相同的源代码,不同的ui,生成不同的UI。

    7、其他注意事项:

    AIR 的 -app.xml 配置文件里,要把权限全部预定义好才行,否则可能没权限操作(比如写文件)或不响应某个功能的情况

    8、AIR FOR IOS 生成的APP:

    1. 远程更新在 iOS 上是不允许的, 它属于代码注入, 有安全隐患,但是将 swf打散成n个子 swf 模块, 封装到1个 IPA 里现在可以了,把所有要加载的 swf 封装到 IPA 内部, 并且定义到配置文件里。不带程序正常的swf能加载显示,并且里面所带的动画和视频声音播放都正常。

    2. 测试了流式加载flv,flv视频的播放控制用AS3也是ok的,其他的视频格式没试过。

    3. 测试了外部加载mp3格式的声音及声音播放控制也是ok的。

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/zhepama/p/3473660.html
Copyright © 2011-2022 走看看