Fluid idea for Life

随笔,杂记

AIR开发新浪微博Android客户端

新浪微博提供了AIR的SDK,这给Flash开发者提供了开发机会,目前AIR已经支持android平台,针对iOS和Blackberry的开发工具也在更新中,如果能使用新浪提供的SDK开发移动应用,还是很有吸引力的,毕竟微博现在已经成为了时下最热门的web站点。

不过如果直接使用新浪提供的SDK来开发Android程序,还需要做一番DIY。上次为了参加上海的Flash技术交流会,我准备了一个Demo,就是使用AIR为Android开发新浪微博客户端,花了点时间将新浪的SDK作了一番修改,解决了一些问题,这里分享下其中的过程,如果有朋友有兴趣做类似的事,可以省一番功夫。

新浪微博的SDK,提供了两种远程登录方式:

1. 通过常规的HTTP请求来验证,客户端将帐号和密码发送至服务器端进行验证,客户端接收返回结果。这种方式简单易用,但缺点也是很明显的,那就是不安全,首先客户端需要获取帐号和密码,然后再发送情况,所有的请求都是明文,而且如果有恶意程序,那账户的安全没法保障,因此,这种方式是不推荐的。

2. 通过oauth协议,这可以说是目前最流行的方式,Facebook、Twitter等都采用了这种方式。如果不了解oauth协议的详情可以google。使用oauth协议的一个好处是第三方程序不会接触账户信息,登录过程是在服务器的网页上完成的,整个过程安全、简单。通过验证和授权后,第三方程序才能访问服务器上的数据信息。

使用oauth协议,在验证账户时,需要打开服务器上的登录页面,用户输入账户密码登录成功后,再回到程序。

新浪的做法是,打开浏览器进入到登录页面,登录成功后,显示一个pin码,然后用户手工将pin码输入到客户端页面,再进行验证。然而,这一过程在手机上很难操作,基本上不具备可用行。

为了自动获取登录成功后的pin码,最好的方式是AIR程序中直接嵌入网页,并且能捕获到登录成功后的pin码信息。幸运的是,新浪的API提供了这种可能性。

在demos.zip中,有个QuickSharePhoto,是使用Flash Build Burrito开发的微博客户端程序,可以拍照,发送微博,其中包括了改动后的新浪AIR SDK。主要的修改在com.sina.microblog.MicroBlog这个类中,使用了AIR Android特有的StageWebView来实现嵌入浏览器页面这个功能。

http://www.fluidea.cn/20101128/demos.zip

 

Tags: air, android

谈AIR Android开发(一)

这段时间使用air开发android程序,有些经验收获。手机开发和桌面、web开发有很大的不同,我觉得有两点比较明显,这两点,在程序设计过程中,要时刻放在心上:

一、受限于有限的资源。狭窄的手机屏幕,即使像Iphone这样的手机,盯着屏幕的时间稍长,眼睛也会感到疲惫;cpu、内存、带宽等资源等和PC无法相比。这些都对程序提出更高要求,性能优化,会占到很大的比重。

二、相对复杂的运行环境。在设计程序时,系统来电、屏幕锁定、电池、网络状况、分辨率...,这些因素都必须考虑到。有时候,即使是一个很简单的应用,也可能会比较复杂。

转到正题上来,AIR开发Android手机程序时,程序一般要实现以下功能:

1、处理状态,程序时刻要保存当前的状态,因为程序随时可能被终止或者转入后台,也可能随时被激活。这个可以通过事件监听来做到:

NativeApplication.nativeApplication.addEventListener( Event.ACTIVATE, appStatusHandler );
NativeApplication.nativeApplication.addEventListener( Event.DEACTIVATE, appStatusHandler );

2、实现多屏操作,也就是Multi-Screen。

观察手机程序,会发现一个特点。从UI角度看,每个功能操作页面往往可以独立,这样方便加一些转场动画,程序看起来比较酷,另外,将程序拆分为多个Screen,且每个Screen保存自己的状态,对于处理全局状态,会比较容易,也算是很面向对象了。

3、处理系统事件,最常见的就是Back和Menu按钮事件。

使用Back按钮是程序中常用的操作方式,符合用户的使用习惯。如果要很好的处理Screen之间的切换,就需要在设计时就考虑清楚。

Menu,应该是Android特有的处理方式,使用AIR来表现Menu是没有问题的,关键是要根据不同的状态给出不同的Menu,这同样和Screen的设计息息相关。

NativeApplication.nativeApplication.addEventListener( KeyboardEvent.KEY_DOWN, onKeyUpHandler );

function onKeyUpHandler(e:KeyboardEvent):void
{           
    switch( e.keyCode )
    {
    case Keyboard.MENU:            
        //显示自制的menu
        break;
    case Keyboard.BACK:   
        e.preventDefault();  //什么时候阻止系统默认事件,什么时候不阻止? 是个问题
        break;
    case Keyboard.LEFT:
    case Keyboard.RIGHT:
    case Keyboard.UP:
    case Keyboard.DOWN:
        //响应方向键
        break;
    }
}

4、UI。目前来看,还没有成熟的UI框架可用,使用Flash CS组件或Flex组件并不是很好的选择,会碰到这样或那样的问题,因为这些组件都没有针对移动设备进行优化,举个简单的例子,List组件,在手机上,滚动条并没有多少价值,对触摸屏来说,最便捷的操作方式是拖拽,滚动条很小,手指都很难点上,没什么意义。


这里推荐:
仿Android皮肤组件,http://blog.kevinhoyt.org/?p=548
as3flobile components,http://custardbelly.com/blog/?p=173

在这个页面http://www.adobe.com/devnet/devices/fpmobile.html,Code samples下面的Control examples,是个很好的例子,千万不能错过。

目前Flex Hero已经放出了开发中的版本,还没有机会研究。不过看了文档,感觉设计思路和我的想法比较接近。

5、可能的话,还有处理自动缩放,包括屏幕旋转自适应,这一点其实和PC上基本相同。对于支持物理感应的设备,还可以加上更酷的功能。

--------------------------------------------------------------------------------------------------

本文系原创,转载请注明出处,谢谢。

Tags: air, android

AIR for Android发布了

 AIR Runtime for android已经发布到电子市场了,今天试着在线安装了一遍。发布的这个版本也就是9/30发布的版本,应该说,已经比较稳定了,程序的启动速度比较快,但比起Native程序,还是有差距。

八卦一下,这个版本和我有点关系,因为其中的一个bug是我提交上去的,Bug #2723863。

哪些机器可以跑AIR? 起码得支持Android 2.2,但支持2.2,并不一定可以跑AIR。看这里(需要登录才能看),按照官方开发人员的说法,需要是ARMv7-A以上处理器的才可以,比如:

HTC Desire
HTC EVO
HTC Incredible
HTC Nexus One
HTC Triumph / Desire / Bravo
HTC Vision Blaze / Desire Z
HTC Ace / myTouchHD / Desire HD
HTC (T-Mobile) G2
HTC Merge / Lexicon

要求还比较高,Adobe的东西总是让人觉得有点不舒服。

不管咋样,这东西出来了,好歹也是个进步。电子市场上已经有几个AIR程序出现了,还是有不少支持者!

 

Tags: android

Android上的实验:AIR与本地程序通信

事实上,标题有点不准确。

几天前,air2.5发布了新的版本,Adobe称性能有了很大提高。提高了多少? 哪里提高了? 这个需要去实验才知道。

三个月前,在prerelease的论坛上,有位仁兄做了个实现,https://prerelease.adobe.com/project/forum/thread.html?cap=E30C51D41E3B4960BC4F1EBD76BEE24D&forid={DE38C2EF-3575-45B9-9320-F3D03884447D}&topid={C7E7AC43-D63B-4A68-8112-FCEB5F51CA48},很有趣,创意非凡的Idea,连Adobe也没有想到。

昨天终于有时间试了一把,在最新的版本上,运行良好,效果非常好。将本地程序和AIR程序打包在一起,然后两者使用Socket通信,这样,很多AIR无法实现的功能都可以通过这种方式实现。

Tags: android, air

Android上的AIR开发笔记

android上使用air开发已经有一段时间了,感觉还不错,当然,遇到了一些不太友好的问题。目前AIR 2.5还在prerelease的阶段,目前大约2周时间就会发布一个新版本,更新速度很是比较快的,这也说明目前的版本还不是很稳定。

从7月5日发布的版本到现在,就我的发现来看,一些bug被fixed,比如使用了Spark组件的Flex4程序不会crash了,Flash CS5的对app-xml的支持更完善了。另一个目前混乱的问题,是关于硬件加速的问题,官方声称目前已经支持这个功能,可惜我到现在还没有找到详细的说明文档。再,有两个比较大的问题,目前还一直没有解决:

1.使用Flex框架的程序中,如果有文本编辑类组件比如TextInput,当组件失去焦点时,虚拟键盘不会自动消失。这应该和组件的内在机制有关系,很可能其中的某个鼠标事件在移动设备上没有得到支持,而导致无法正确处理焦点事件。

这个问题我想只有在下一代的Flex框架中才能得到完美解决。

2.在播放H.264格式的视频时,性能很差。在Know Issues中,关于视频的Bug一直存在。不过在Nexus One上,使用浏览器看视频,性能却比AIR程序表现更好点。

说到Nexus One,确实是款很不错的手机。IPone我只是看过两眼,没有机会仔细研究。拿到Nexus One已经有一段时间了,性能确实很强劲,Flash Player 10.1的表现值得期待。

 

Tags: air, android

使用Air 2.5预览版开发Android程序

Google前几天发布了Android 2.2和新款手机,Adobe这边也迅速发布了Air 2.5的预览版,对开发者开放,现在,终于可以试试用Air开发Android程序了。

http://labs.adobe.com/technologies/air2/android/上,注册后一个帐号后就可以下载最新的Air2.5在测试版本,以及相关的Android开发工具,当然,还必须下载Android的SDK。

目前,大概有两种方式:

1、使用Flex Builder,不过得建立ActionScript Project性质的Air程序,目前还不能使用Flex framework来开发mobile程序,只能等flex framework的移动版发布才行。

2、使用Flash cs5,安装相关插件。

不过,使用Air开发Android程序,目前只能针对Android 2.2版本,也就是Google最新发布的版本,目前市面上使用该系统的手机只有两三种,要等到市场和技术同时成熟估计还得一阵子。

在labs上同时放出了N个例子,看来开发者的热情很高。

ps,openplug前不久发布的新版,已经支持flex4了。

Tags: air, android