使用Flash在电脑与Android间开发局域网P2P项目


  本文标签:Android Adobe AIR 局域网P2P项目

  

要求

  你需要先安装下列产品:

Flash Professional CS5

  • 试用
  • 购买

Flash Professional CS5上的AIR for Android开发插件

  • 下载

示例文件:

  • P2P_example.zip(ZIP, 311K)

预备知识

  • 会使用Flash Pro制作和发布项目
  • ActionScript 3.0中级编程水平

使用FLASH PROFESSIONAL CS5开发运行于ANDROID平台的AIR2.5应用

  Android 2.2平台支持Adobe AIR运行时环境,版本为2.5,使用开发工具Flash Builder Burrito可以基于Flex SDK 4.5 (Hero)开发一个AIR2.5的应用,对于Flash Pro用户来说,使用装有AIR for Android插件的Flash Pro CS5同样可以方便快速地开发一个手机应用  。

  如果你没有安装Flash Profession CS5,请到这里下载试用版,然后再到Adobe实验室下载AIR2.5开发插件(Beta 2),安装成功后打开Flash,在开始画面中新建一个AIR for Android文档  。这篇帖子用MAC 英文版的Flash Pro举例  。

在Flash Profession CS5中新建一个AIR for Android项目  。

图1. 在Flash Profession CS5中新建一个AIR for Android项目

  由于安装了AIR2.5开发包,Flash Professional CS5便可以作为一个发布AIR2.5的工具,打开Publish Settings,看到Flash的发布环境是AIR Android,点击右面的设置按钮,可以进入AIR2.5的发布设置面板:

AIR2.5的发布设置面板

图2. AIR2.5的发布设置面板

  General里是一些关于应用的基本信息,Android平台下的应用安装包是APK文件,在这个面板里可以直接给APK文件命名,并且定义应用程序名称  。需要注意的是在App ID这一项里可以定义应用程序ID,id值不能有下划线等特殊字符,否则编译的时候会报错  。

  在Aspect ratio里可以设置应用在手机中的显示方式为横向(landscape)或者纵向(portrait)  。也可以指定是否全屏或者是否按设备的倾斜方向自动调整横纵显示(Auto orientation)  。

  接下来是设置图像的渲染方式,这里有三个选项Auto,CPU和GPU,如果选择了GPU,会优先使用设备的显卡来渲染图像,不同的设备显卡有不同的限制,所以如果选择这一项需要在多个设备中测试以确保无误  。Android的GPU有如下几点限制:

  • 不支持滤镜效果
  • 不支持PixelBender的图片叠加和填充效果
  • 不支持以下的图像叠加效果:layer,alpha,erase,overlay,hardlight,lighten,darken
  • 不建议选择GPU来渲染视频

  如果使用GPU渲染,软键盘打开时输入框不会自动调整到可视范围内,所以需要将文本框位置固定在上半屏  。

  如果一个显示对象不能被GPU渲染,比如加了滤镜的影片剪辑,它会完全不显示  。

在Deployment面板中设置部署和发布参数

图3. 在Deployment面板中设置部署和发布参数

  Deployment是部署和发布的一些设置,如同发布一个桌面版的AIR应用程序一样,发布Android AIR也需要验证  。
在Android部署类型(Deployment Type)中可以选择Device release,Emulator release和Debug  。如果选择了Debug,可以通过网络在设备与Flash间建立一个测试环境,在Flash里打开Debug->Begin Remote Debug Session->ActionScript 3.0,并且在设备中显示的对话框中输入主机的IP地址和主机名称  。
After publishing可以选择安装应用到设备中,并且同时运行应用,建议勾选两项  。

  Icons 是用来设置应用的显示图标(36×36, 48×48, 72×72),图片支持PNG文件  。

在Permissions中设置INTERNET权限

图4. 在Permissions中设置INTERNET权限

  Permissions是设置应用的访问权限,因为本例需要开发一个P2P的网络应用,所以需要选择INTERNET这一项  。

  接下来就是在移动设备上(本例为HTC Desire)的设置,打开设置->应用程序->开发,选择"USB调试",便可以使用USB将设备与电脑连接,并发布一个AIR2.5应用  。

使用FLASH P2P技术在局域网内搭建一个NETGROUP连接

  Flash P2P (Pear to Pear)技术允许各个联网客户端使用Real-Time Media Flow Protocol (RTMFP)协议进行点对点通讯  。在广域网需要连接到支持RTMFP协议的服务器,在局域网则不需要服务器,可以使用组播地址(Multicast address)进行通讯  。P2P需要通过用户数据报协议(UDP)来传输数据,所以确保你的网关没有阻止UDP协议  。
如果你不确定你的设备是否支持UDP通讯,请用手机浏览器访问这个网址http://cc.rtmfp.net来自动检测你的网络状态  。

  这里介绍一个在局域网内建立P2P的例子,基本思路是建立一个NetConnection,然后搭建一个NetGroup,也就是通讯团队,最后与团队中其他邻居进行广播通讯  。

  使用NetConnection建立连接,如果参数为"rtmfp:",则会建立一个局域网连接  。

  1. nc = new NetConnection(); 
  2. nc.addEventListener(NetStatusEvent.NET_STATUS,netStatus); 
  3. nc.connect("rtmfp:"); 

  使用NetGroup建立通讯团队,在GroupSpecifier里可以指定团队id,通过它可以建立PIN码来进行用户过滤  。按下面的代码可以建立一个NetGroup团队,如果要搭建局域网P2P,则必须使用组播地址(Multicast Address), 并且指定地址IP和端口,请查阅这里了解更多关于组播地址的信息  。

  1. private function setupGroup():void{ 
  2. var gs:GroupSpecifier = new GroupSpecifier("localgroup"); 
  3. gs.ipMulticastMemberUpdatesEnabled = true
  4. gs.multicastEnabled = true
  5. gs.postingEnabled = true
  6. gs.routingEnabled = true
  7. gs.addIPMulticastAddress("239.254.254.2:30303"); 
  8.  
  9. ng = new NetGroup(nc,gs.groupspecWithoutAuthorizations()); 
  10. ng.addEventListener(NetStatusEvent.NET_STATUS,netStatus); 

  侦听NetStatusEvent事件来获取网络状态,NetStatusEvent侦听器是团队内通讯的窗口  。如果邻居连接到了NetGroup,便可以使用myNetGroup.post方法来广播消息对象,对方通过NetGroup.Posting.Notify来获取消息  。

  1. private function netStatus(pEvent:NetStatusEvent):void{ 
  2. dispatchEvent(pEvent); 
  3. switch(pEvent.info.code){ 
  4. case "NetConnection.Connect.Success": 
  5. setupGroup(); 
  6. break; 
  7. case "NetGroup.Connect.Success": 
  8. dispatchEvent(new NetEvent(NetEvent.CONNECTED)); 
  9. break; 
  10. case "NetGroup.Neighbor.Connect": 
  11. dispatchEvent(new NetEvent(NetEvent.NEIGHBOR_CONNECTED)); 
  12. break; 
  13. case "NetGroup.Posting.Notify": 
  14. dispatchEvent(new NetEvent(NetEvent.POSTING_NOTIFY)); 
  15. dataObject = pEvent.info.message; 
  16. break; 

需要注意的几点问题:

  首次连接的时间根据网络状态的不同可能会很长,尤其是无线网络  。
使用手机的WiFi热点来建立连接,热点机与电脑无法连接  。

运行效果

图5. 运行效果

关于作者

  李鹏(James Li),2001年毕业于吉林大学商学院,同年接触Photoshop,Illustrator和Flash  。毕业后一直在从事Flash的设计与开发,在教育、IT、互联网广告等不同领域里做过4年的Flash设计师和5年的AIR程序开发,期间曾在2006与2008年两次去德国工作,对Flash前端交互设计有独到的见解和丰富的经验  。