使用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

转载于:https://www.cnblogs.com/zhepama/p/3473658.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟内存相关原理

内存管理1.虚拟内存2.内存分段3.内存分页多级页表TLB1.虚拟内存 众所周知:单片机是没有操作系统的,所以单片机的CPU是直接操作内存的物理地址(physical address,PA) 在这种情况下,程序内存中是无法同时运行多个程序。例如第一个程序在10位置的位置存放立一个数值&#xff0c;…

Team Up!用Visual Studio 2005 Team System组织所有的装备 --作者:Chris Menage

[摘要]本文基于Visual Studio 2005 Team System CTP&#xff0c;为您介绍在软件开发周期中中的开发进程、团队支持、工作项跟踪、单元和装载测试及其他。 软件开发通常被认为是个很困难的过程。前人已经通过组织无数次地学习和编著大量的书籍来阐述如何改进开发应用程序的流程…

贪心算法(leetcode分类解题,C++代码详细注释)

贪心算法前言455.分发饼干135.分发糖果435.无重叠区间605.种花问题452.用最小数量的箭引爆气球763.划分字母区间122. 买卖股票的最佳时机 II376. 摆动序列53. 最大子序和前言 贪心算法或贪心思想采用贪心的策略&#xff0c;保证每次操作都是局部最优的&#xff0c;从而使最后得…

互联网日志的种类、存储和计算

最近几年&#xff0c;经常听到数据挖掘这个词。不过&#xff0c;我仔细看了下&#xff0c;发现这个词还是挺模糊的。挖掘这个词&#xff0c;应该指从数据中发现有价值的信息。比如从搜索词中&#xff0c;发现网民的关注点&#xff0c;进而指导广告投放、产品推荐&#xff0c;生…

[转]2006年十二星座运程 目录

白羊座2006年运程 金牛座2006年运程 双子座2006年运程 巨蟹座2006年运程 狮子座2006年运程 处女座2006年运程 天秤座2006年运程 天蝎座2006年运程 射手座2006年运程 摩羯座2006年运程 水瓶座2006年运程 双鱼座2006年运程作者Blog&#xff1a;http://blog.csdn.net/cndg…

双指针法(leetcode分类解题,C++代码详细注释)

双指针法前言167.两数之和 II - 输入有序数组88.合并两个有序数组142. 环形链表 II633.平方数之和680. 验证回文字符串 Ⅱ27. 移除元素344. 反转字符串剑指 Offer 05. 替换空格151. 翻转字符串里的单词206.反转链表125. 验证回文串19. 删除链表的倒数第 N 个结点面试题 02.02. …

ADSL技术的系统结构

ADSL技术的系统结构 1. ADSL原理和技术性能 现存的用户环路主要由UTP&#xff08;非屏蔽双绞线&#xff09;组成。UTP对信号的衰减主要与传输距离和信号的频率有关&#xff0c;如果信号传输超过一定距离&#xff0c;信号的传输质量将难以保证。此外&#xff0c;线路上的桥接抽头…

DiskSim

1.使用笔记 http://feifei432.blog.163.com/blog/static/140253361201022211949152/ http://feifei432.blog.163.com/blog/static/140253361201022212253597/ 2.安装 http://blog.sina.com.cn/s/blog_448574810101bb65.html转载于:https://www.cnblogs.com/yaolei/p/3487598.ht…

二分法(leetcode分类解题,C++代码详细注释)

二分法前言69. x 的平方根35. 搜索插入位置前言 二分查找也常被称为二分法或者折半查找&#xff0c;每次查找时通过将待查找区间分成两部分并只取一部分继续查找&#xff0c;将查找的复杂度大大减少。对于一个长度为 O(n) 的数组&#xff0c;二分查找的时间复杂度为 O(log n)。…

kernel module required key not available

UEFI主板中禁用Secure Boot转载于:https://www.cnblogs.com/jhaohai/p/3489818.html

我自横刀向天笑,我命由我不由天

那么豪放不羁,慷慨如歌.虽然江湖再来,翠山远逝,肝胆乾坤有去留, 可人生至此,交友如斯,生复何恨,死有何悲呢?我一直在想&#xff0c;“向天笑”的这个笑是怎样的笑&#xff0c;怎样的心情&#xff1f;不有行者&#xff0c;无以图将来&#xff1b;不有死者&#xff0c;无以酬圣猪…

UNIX网络编程学习笔记(代码超详细解析)(持续更新)

1. 其他函数准备 1. TCP 回射服务器程序&#xff1a; str_echo 函数 #include “unp.h”void str_echo(int sockfd) {ssize_t n;char buf[MAXLINE];again:/*write() 函数定义&#xff1a;ssize_t write (int fd, const void * buf, size_t count); 函数说明&#xff1a;w…

oracle数据库中函数和存储过程中的区别

一、函数必须有返回值&#xff0c;过程没有返回值&#xff1b; 二、函数可以单独执行&#xff0c;过程必须通过execute执行&#xff1b; 三、函数可以嵌入SQL中执行&#xff0c;过程不能。 可以将比较复杂的查询写成函数&#xff0c;然后在过程中调用。转载于:https://www.cnbl…

百川2大模型微调问题解决

之前用https://github.com/FlagAlpha/Llama2-Chinese微调过几个模型&#xff0c;总体来说llama2的生态还是比较好的&#xff0c;过程很顺利。微调百川2就没那么顺利了&#xff0c;所以简单做个记录 1. 数据准备&#xff0c;我的数据是单轮对话&#xff0c;之前微调llama2已经按…