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

    1、  Air如何判断android、ios 平台网络连接状态?

    Android,使用as3原生api:

    [javascript] view plaincopy
    1. if(NetworkInfo.isSupported)//只有android支持  
    2.   
    3.                 NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE,onNetWorkChanged);          
    4.                 onNetWorkChanged();  
    5.        }  
    6. rivate function onNetWorkChanged(e:Event = null):void  
    7.        {                            
    8.                 var isActived:Boolean =false;  
    9.                  
    10.                 varinterfaces:Vector.<NetworkInterface> =NetworkInfo.networkInfo.findInterfaces();  
    11.                  
    12.                 varnetInterface:NetworkInterface;  
    13.                 for ( var i:int = 0, len:int= interfaces.length; i < len; i++)  
    14.                 {  
    15.                          netInterface =interfaces[i];  
    16.                          if(netInterface.name.toLowerCase()== "wifi" && netInterface.active) {  
    17.                                    isActived= true;  
    18.                                    break;  
    19.                          } elseif(netInterface.name.toLowerCase() == "mobile" &&netInterface.active) {  
    20.                                    isActived= true;  
    21.                                    break;  
    22.                          }  
    23.                 }  
    24.                 PhoneConfig.isOpenNet =isActived;  
    25.                  
    26.                 if(isActived == false)  
    27.                 {  
    28.                          MsgManager.show("当前网络不可用,请检查你的网络设置。");  
    29.                 }  
    30.        }  


               Ios平台,需要引入独立开发的ane扩展和类库,判断核心代码:

     

    [javascript] view plaincopy
    1. if(netInterface.name.toLowerCase()== "en0" && netInterface.active) {//wifi  
    2.                 isActived= true;  
    3.                 break;  
    4.             }else if(netInterface.name.toLowerCase()== "pdp_ip0" && netInterface.active) {//gprs  
    5.                 isActived= true;  
    6.                 break;  
    7.          }  

     

    2、  iphone 5读不到正确尺寸问题

    ios平台读取stageWidth和stageHeight方法和普通的air方法一致,但iphone5出现读取不正确的情况。

    解决方法:需要根目录放一张名为Default-568h@2x.png尺寸为640*1136的图片,并且打包进去。

    详情见http://zengrong.net/post/1752.htm#more-1752

    3、  ios平台运行 release版本中途卡住问题

    同一个文件 加载到当前域 加载第二次时 就会卡住(ipa调试版正常,release版就有问题;androidapk不论是调试版还是release都正常)

    4、  打包ipa失败,提示无效的文件:

    打包ipa时,如果文件里面有一个不正确格式的swf,打包必定失败;如果把swf换成其他不常用文件名,即可解决。

    5、  android、ios平台最小化、关闭电源时app的检测和处理方式

    手机测试结果:

    1)android中 按home键或电源键都是使程序后台运行,socket不断。

    2)ios中按home键是使程序后台运行,socket不断,按电源键程序后台运行,但socket断。

    通过事件ACTIVATE、DEACTIVATE来进行代码逻辑控制

    NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE,onActivate);

    NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE,onDeactivate);

    6、  android、ios上文件存储方法

    核心代码:

     

    [javascript] view plaincopy
    1.     this.saveSDCardFile(File.applicationStorageDirectory.url+ "/aa.swf", btye);  
    2. (this.getSDCardFile(File.applicationStorageDirectory.url + "/aa.swf");  
    3. /** 
    4.          * 读取sd卡文件 
    5.          */  
    6.         private functiongetSDCardFile(url:String):ByteArray  
    7.         {  
    8.             var file:File =File.applicationStorageDirectory.resolvePath(url);  
    9.             if(file.exists == false)  
    10.                 return null;  
    11.              
    12.             var stream:FileStream = new FileStream();  
    13.             stream.open(file,FileMode.READ);  
    14.             var bytes:ByteArray = new ByteArray;  
    15.             stream.readBytes(bytes,0, stream.bytesAvailable);  
    16.             stream.close();  
    17.             return bytes;  
    18.         }  
    19.         /** 
    20.          * 往sd卡上存储文件 
    21.          */  
    22.         private functionsaveSDCardFile(url:String, bytes:ByteArray):void  
    23.         {  
    24.             var file:File =File.applicationStorageDirectory.resolvePath(url);  
    25.             var stream:FileStream = new FileStream();  
    26.             stream.open(file,FileMode.WRITE);  
    27.             stream.writeBytes(bytes);  
    28.              
    29.             stream.close();  
    30.      }  

    注意android和ios上一些目录路径不一样

     

    [javascript] view plaincopy
    1.     trace( File.applicationDirectory.url);//App:/ (/data/data/app.appId/app/assets)  
    2.                     trace(File.applicationStorageDirectory.url);//|app-storage:/ (/data/data/app.appID/appID/LocalStore)  
    3.                     trace(File.documentsDirectory.url);  
    4.                     trace(File.userDirectory.url);  
    5.                     trace(File.desktopDirectory.url);  
    6.                     trace(File.createTempDirectory().url);//data/data/app.appId/cache  
    7.                     //android:  
    8. //                  app:/  
    9. //                  app-storage:/  
    10. //                  file:///storage/sdcard0  
    11. //                  file:///storage/sdcard0  
    12. //                  file:///storage/sdcard0  
    13. //                  file:///data/data/air.TestLoad.debug/cache/FlashTmp.u15893  
    14.                     //ios:  
    15. //                  app:/  
    16. //                  app-storage:/  
    17. //                  file:///var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA/Documents  
    18. //                  file:///var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA  
    19. //                  file:///var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA/Desktop  
    20. //                  file:///private/var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA/tmp/FlashTmp.bDIE2x  

    Android 和 ios 文件系统差异http://www.cnblogs.com/sevenyuan/archive/2013/03/07/2948300.html

    7、  游戏过程中的待机处理,比如在激烈pk中不允许手机进入睡眠状态:

    通过设置NativeApplication.nativeApplication.systemIdleMode属性

     

    [javascript] view plaincopy
    1. /** 
    2.          * 是否关闭 休眠模式 
    3.          * @param value 
    4.          */  
    5.         public functionkeepAwake(value:Boolean):void  
    6.         {  
    7.             if(value)  
    8.                 NativeApplication.nativeApplication.systemIdleMode= SystemIdleMode.KEEP_AWAKE;  
    9.             else  
    10.                 NativeApplication.nativeApplication.systemIdleMode= SystemIdleMode.NORMAL ;  
    11.         }  

    8、  如何读取air的app配置文件?如何读取里面的版本号?

     

    [javascript] view plaincopy
    1. //版本号  
    2. public function get version():String  
    3.         {  
    4.             var appDescriptor:XML =NativeApplication.nativeApplication.applicationDescriptor;//配置文件  
    5.             var ns:Namespace =appDescriptor.namespace();  
    6.             return "" +appDescriptor.ns::versionNumber;  
    7.         }  

    9、  统计流量功能(未找到as3原生api支持,可通过第三方ane扩展实现)

    10、手机加载大文件解压缩很慢,卡住问题(暂无较好的规避方法)

    11、  检测鼠标按下菜单键、及其他键的方法及响应

    [javascript] view plaincopy
    1. NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN,this.keyHandler);  
    2. private function keyHandler(e:KeyboardEvent):void  
    3.                    {  
    4.                             if(e.keyCode==Keyboard.BACK)  
    5.                             {  
    6.                                      e.preventDefault();  //取消返回键的退出事件  
    7.                                       
    8.                                      ExitPane.instance.show();  
    9.                             }  
    10.                             elseif(e.keyCode== Keyboard.MENU)  
    11.                             {  
    12.                                      this.times++;  
    13.                                      if(times>= 5)  
    14.                                                ClientConfig.webDebug= true;  
    15.                             }  
    16.                             elseif(e.keyCode == Keyboard.SEARCH)  
    17.                             {  
    18.                                       
    19.                             }  
    20.                             else  if (e.keyCode == Keyboard.HOME) {  
    21.                                      //Handle Home button.  
    22.                             }  
    23.                    }  

    12、  手机调试不方便怎么办?设置手机代理,把ip指向电脑,这样所有数据包就会通过电脑发送和接受,用电脑抓包调试。

    13、  其他知识点:

    运行ios发行版ipa特有问题:

    1)uint和int的比较:int类型的-1大于uint类型的0;

    2)String(null) 依旧是null值,而不是字符串的"null"

    NativeApplication 的exit() 方法不会导致调度exiting 事件;

    android中任务管理器中结束应用也不会派发exit事件,ios中未知

    ios下通过任务管理器关闭app,app本身无法控制退出

      

    flash builder 编译提示错误:Erroroccurred while packaging the application: Map failed

    解决办法:一般清理一下项目就ok了

    stage.displayState =StageDisplayState.FULL_SCREEN

    设置全屏后立刻读取stagewidth和stageheight是不准确的,需要延时到下一帧再读取

    桌面 移动设备 api支持的差异http://help.adobe.com/en_US/air/build/WS144092a96ffef7cc16ddeea2126bb46b82f-8000.html

    adt 打包时目标参数详解 http://help.adobe.com/zh_CN/air/build/WS901d38e593cd1bac1e63e3d128cdca935b-8000.html

  • 相关阅读:
    bootstrap 模态框日期控件datepicker被遮住问题的解决
    (转)Jetty实战之 安装 运行 部署
    (转)Redis研究(一)—简介
    在jboss上部署web应用
    webSphere
    Weblogic部署项目三种方式
    js构造函数详解
    范仁义js课程---51、作用域实例
    javascript疑难问题---7、使用var和不使用var声明变量的区别
    范仁义js课程---50、函数作用域
  • 原文地址:https://www.cnblogs.com/fuland/p/3629398.html
Copyright © 2011-2022 走看看