• 使用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的。

  • 相关阅读:
    spring cloud alibaba +seata 实战中Error processing condition on io.seata.spring.boot.autoconfigure.问题总结
    Docker部署Elasticsearch及安装后自动关闭的问题
    SpringBoot10:Web开发静态资源处理
    SpringBoot09:整合MyBatis
    SpringBoot08:整合Druid
    SpringBoot07:整合JDBC
    SpringBoot06:自定义starter
    SpringBoot05:自动配置原理
    SpringBoot04:JSR303数据校验及多环境切换
    SpringBoot03:yaml配置注入
  • 原文地址:https://www.cnblogs.com/zhepama/p/3473660.html
Copyright © 2020-2023  润新知