MyException - 我的异常网
当前位置:我的异常网» 人工智能 » 使用air进行移动app开发常见功能和有关问题(二)

使用air进行移动app开发常见功能和有关问题(二)

www.MyException.Cn  网友分享于:2013-09-10  浏览:137次
使用air进行移动app开发常见功能和问题(二)

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

Android,使用as3原生api:

    if(NetworkInfo.isSupported)//只有android支持
 {
                    NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE,onNetWorkChanged);        
                    onNetWorkChanged();
           }
   private 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

文章评论

10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
那些争议最大的编程观点
那些争议最大的编程观点
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我是如何打败拖延症的
我是如何打败拖延症的
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员必看的十大电影
程序员必看的十大电影
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
中美印日四国程序员比较
中美印日四国程序员比较
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
鲜为人知的编程真相
鲜为人知的编程真相
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
旅行,写作,编程
旅行,写作,编程
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
如何成为一名黑客
如何成为一名黑客
一个程序员的时间管理
一个程序员的时间管理
老程序员的下场
老程序员的下场
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
 程序员的样子
程序员的样子
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
10个调试和排错的小建议
10个调试和排错的小建议
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
每天工作4小时的程序员
每天工作4小时的程序员
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有