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

移动开发 Android
Android2.2移动设备,本例为HTC Desire (A8180),需要到Android Market下载安装Adobe AIR2.5应用程序以及支持UDP协议的局域网环境。

要求

你需要先安装下列产品:

Flash Professional CS5

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

示例文件:

预备知识

  • 会使用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前端交互设计有独到的见解和丰富的经验。

责任编辑:佚名 来源: jamesli.cn/blog
相关推荐

2009-07-22 15:52:01

2009-01-18 09:36:00

2010-03-22 15:27:40

云计算

2012-12-10 09:46:21

P2P云存储Symform

2022-07-19 16:59:04

流媒体传输IPC物联网

2010-12-13 13:17:36

360网速保护P2P下载

2009-01-08 09:52:00

2020-03-05 20:30:15

Syncthing文件同步工具开源

2010-07-13 14:41:14

2009-05-18 09:11:00

IPTV融合宽带

2013-12-12 13:46:40

大数据金融P2P大数据

2010-07-07 10:31:45

2013-03-13 09:24:56

2011-03-09 11:09:07

Skiller限速局域网

2018-08-16 07:29:02

2015-04-27 11:49:23

2012-09-25 13:47:43

C#网络协议P2P

2010-06-28 11:15:45

BitTorrent协

2017-08-04 09:13:44

网贷金融互金

2012-10-24 10:04:09

点赞
收藏

51CTO技术栈公众号