使用air进行移动app开发常见功能和问题(二)
1、 Air如何判断android、ios 平台网络连接状态?
Android,使用as3原生api:
- if(NetworkInfo.isSupported)//只有android支持
- NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE,onNetWorkChanged);
- onNetWorkChanged();
- }
- rivate function onNetWorkChanged(e:Event = null):void
- {
- var isActived:Boolean =false;
- varinterfaces:Vector.<NetworkInterface> =NetworkInfo.networkInfo.findInterfaces();
- varnetInterface:NetworkInterface;
- for ( var i:int = 0, len:int= interfaces.length; i < len; i++)
- {
- netInterface =interfaces[i];
- if(netInterface.name.toLowerCase()== "wifi" && netInterface.active) {
- isActived= true;
- break;
- } elseif(netInterface.name.toLowerCase() == "mobile" &&netInterface.active) {
- isActived= true;
- break;
- }
- }
- PhoneConfig.isOpenNet =isActived;
- if(isActived == false)
- {
- MsgManager.show("当前网络不可用,请检查你的网络设置。");
- }
- }
Ios平台,需要引入独立开发的ane扩展和类库,判断核心代码:
- if(netInterface.name.toLowerCase()== "en0" && netInterface.active) {//wifi
- isActived= true;
- break;
- }else if(netInterface.name.toLowerCase()== "pdp_ip0" && netInterface.active) {//gprs
- isActived= true;
- break;
- }
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上文件存储方法
核心代码:
- this.saveSDCardFile(File.applicationStorageDirectory.url+ "/aa.swf", btye);
- (this.getSDCardFile(File.applicationStorageDirectory.url + "/aa.swf");
- /**
- * 读取sd卡文件
- */
- private functiongetSDCardFile(url:String):ByteArray
- {
- var file:File =File.applicationStorageDirectory.resolvePath(url);
- if(file.exists == false)
- return null;
- var stream:FileStream = new FileStream();
- stream.open(file,FileMode.READ);
- var bytes:ByteArray = new ByteArray;
- stream.readBytes(bytes,0, stream.bytesAvailable);
- stream.close();
- return bytes;
- }
- /**
- * 往sd卡上存储文件
- */
- private functionsaveSDCardFile(url:String, bytes:ByteArray):void
- {
- var file:File =File.applicationStorageDirectory.resolvePath(url);
- var stream:FileStream = new FileStream();
- stream.open(file,FileMode.WRITE);
- stream.writeBytes(bytes);
- stream.close();
- }
注意android和ios上一些目录路径不一样
- trace( File.applicationDirectory.url);//App:/ (/data/data/app.appId/app/assets)
- trace(File.applicationStorageDirectory.url);//|app-storage:/ (/data/data/app.appID/appID/LocalStore)
- trace(File.documentsDirectory.url);
- trace(File.userDirectory.url);
- trace(File.desktopDirectory.url);
- trace(File.createTempDirectory().url);//data/data/app.appId/cache
- //android:
- // app:/
- // app-storage:/
- // file:///storage/sdcard0
- // file:///storage/sdcard0
- // file:///storage/sdcard0
- // file:///data/data/air.TestLoad.debug/cache/FlashTmp.u15893
- //ios:
- // app:/
- // app-storage:/
- // file:///var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA/Documents
- // file:///var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA
- // file:///var/mobile/Applications/EBFEE682-C347-4BC1-9264-6E4B65F4D2BA/Desktop
- // 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属性
- /**
- * 是否关闭 休眠模式
- * @param value
- */
- public functionkeepAwake(value:Boolean):void
- {
- if(value)
- NativeApplication.nativeApplication.systemIdleMode= SystemIdleMode.KEEP_AWAKE;
- else
- NativeApplication.nativeApplication.systemIdleMode= SystemIdleMode.NORMAL ;
- }
8、 如何读取air的app配置文件?如何读取里面的版本号?
- //版本号
- public function get version():String
- {
- var appDescriptor:XML =NativeApplication.nativeApplication.applicationDescriptor;//配置文件
- var ns:Namespace =appDescriptor.namespace();
- return "" +appDescriptor.ns::versionNumber;
- }
9、 统计流量功能(未找到as3原生api支持,可通过第三方ane扩展实现)
10、手机加载大文件解压缩很慢,卡住问题(暂无较好的规避方法)
11、 检测鼠标按下菜单键、及其他键的方法及响应
- NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN,this.keyHandler);
- private function keyHandler(e:KeyboardEvent):void
- {
- if(e.keyCode==Keyboard.BACK)
- {
- e.preventDefault(); //取消返回键的退出事件
- ExitPane.instance.show();
- }
- elseif(e.keyCode== Keyboard.MENU)
- {
- this.times++;
- if(times>= 5)
- ClientConfig.webDebug= true;
- }
- elseif(e.keyCode == Keyboard.SEARCH)
- {
- }
- else if (e.keyCode == Keyboard.HOME) {
- //Handle Home button.
- }
- }
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
使用air进行移动app开发常见功能和问题(二)的更多相关文章
- 使用air进行移动app开发常见功能和问题(一)
1. 获取最近联系人 思路:侦听Geolocation的update事件,获取经度和纬度信息,再把坐标信息上传至服务器,服务器比较坐标信息算出距离,返回最近位置的若干个人. update时间在2种情 ...
- 使用AIR进行移动APP开发常见功能和问题(下)
1. Air如何判断android.ios 平台网络连接状态? Android,使用as3原生api: if(NetworkInfo.isSupported)//只有android支持 Networ ...
- 使用AIR进行移动APP开发常见功能和问题(上)
1. 获取最近联系人 思路:侦听Geolocation的update事件,获取经度和纬度信息,再把坐标信息上传至服务器,服务器比较坐标信息算出距离,返回最近位置的若干个人. update时间在2种情 ...
- APP测试常见功能测试点汇总
本文总结了一些APP功能测试中经常遇见测试点,仅供参考,是好早以前看哪位前辈总结的,一直在使用,所以也稍微的修改了下放到自己的博客中,以备日后温习.1.安装和卸载安装和卸载是任何一款APP中都属于最基 ...
- IOS开发小功能2:二维码扫描界面的设计(横线上下移动)
效果图如上,实现的是一个二维码扫描界面. 下面我贴出线条上下移动的代码,至于二维码的代码是用的第三方库. 首先是整体的结构: 注意下面的库文件一个都不能少,否则会报错. TLTiltHighlight ...
- pc蛋蛋app开发定制
如今的pc蛋蛋app开发和pc蛋蛋软件开发互联网已经不再是一个新兴行业,对打仗的团队也要求更加正规化.对于产品技术运营市场等角色来说,如果每个人都能有比较全面的视野,那这个产业将是一个全新的趋势,单一 ...
- APP开发外包时常见的错误
时代在发展,科技在进步,很多企业都想要开发出属于自己的一款APP.然而,不是每个企业都有开发团队或是专门雇一个技术人员来做的,有一个好方法就是把开发APP的工作外包出去,找一个比较好的外包公司根据自己 ...
- 如何用HMS Nearby Service给自己的APP开发一个名片交换功能?
在工作和生活中,遇见新的同事或者合作伙伴,交换名片是一个常见的用户需求,纸质名片常忘带.易丢失,是客户的一个痛点.因此,市场上出现了很多交换电子名片的APP和小程序.那么,如何给自己的APP开发一 ...
- 关于手机APP开发的一些常见误解
移动应用不适用于小型企业和创业公司 如果你想要开发一款移动APP,那么在前期开发一种偏见的态度并不是一个好主意.如果你认为移动APP只有跨国公司和大企业创业者才会去开发,那么你可能错过了成功的捷径.而 ...
随机推荐
- 【转】JAVA中的反射机制
反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...
- 基于MongoDB分布式存储进行MapReduce并行查询
中介绍了如何基于Mongodb进行关系型数据的分布式存储,有了存储就会牵扯到查询.虽然用普通的方式也可以进行查询,但今天要介绍的是如何使用MONGODB中提供的MapReduce功能进行查询. ...
- 动态加载dll--不占用文件
Assembly assembly = Assembly.Load(path); 用上面的方法可以动态的加载到dll,但是用这种方法加载到的dll一直到程序运行结束都是占用的,在此期间不能够对此进行升 ...
- delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码
unit1 [delphi] view plain copyunit Unit1; interface uses Windows, Messages, SysUtils, Variants, Clas ...
- 魅族MX2代理设置
魅族MX2买了快2年了,今天才知道有这个功能,唉 连接一个无线网络,比如我的centos 长按网络名字 选代理设置,设置自己的代理,再也不用SS 或 VPN 的android端了,老是提示ROOT权限 ...
- 数电课设——琐碎
这几天没有更新过网站了,也没继续开发VellLock了,可是感觉还是没有闲着,一直在跟下面的一些元器件在打交道,当然下面的都是小儿科,英文文档都看得我快吐血了.数电基本属于棺材边上过的我,是各种头大, ...
- WEB开发总结(持续更新。。。)
近期开始搞搞web的东西,觉得有必要把遇到的问题总结一下,就在这里当做个笔记本吧. 1.用maven建立的web工程,在运行的时候,右键找不到“Run on server”菜单: 可以在命令提示行中, ...
- [学姿势]使用AngularJS+CodeIgniter框架经验谈
这篇文章作为总结总结7月份参与项目时遇到的新东西和问题,包括这两个框架(CodeIgniter.AngularJS)以及两个功能实现.有前端调试显示动态认证,也有用php实现功能模块. 1.添加设备 ...
- Java网络编程(TCP客户端)
TCP传输:两个端点建立连接后会有一个传输数据的通道,这个通道就称为流,而且是建立在网络基础上的流,之为socket流,该流中既可以读取也可以写入. TCP的两个端点:一个客户端:ServerSock ...
- 起底多线程同步锁(iOS)
iOS/MacOS为多线程.共享内存(变量)提供了多种的同步解决方案(即同步锁),对于这些方案的比较,大都讨论了锁的用法以及锁操作的开销,然后就开销表现排个序.春哥以为,最优方案的选用还是看应用场景, ...