自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Flash在電腦與Android間開發(fā)局域網(wǎng)P2P項(xiàng)目

移動開發(fā) Android
Android2.2移動設(shè)備,本例為HTC Desire (A8180),需要到Android Market下載安裝Adobe AIR2.5應(yīng)用程序以及支持UDP協(xié)議的局域網(wǎng)環(huán)境。

要求

你需要先安裝下列產(chǎn)品:

Flash Professional CS5

Flash Professional CS5上的AIR for Android開發(fā)插件

示例文件:

預(yù)備知識

  • 會使用Flash Pro制作和發(fā)布項(xiàng)目
  • ActionScript 3.0中級編程水平

使用FLASH PROFESSIONAL CS5開發(fā)運(yùn)行于ANDROID平臺的AIR2.5應(yīng)用

Android 2.2平臺支持Adobe AIR運(yùn)行時(shí)環(huán)境,版本為2.5,使用開發(fā)工具Flash Builder Burrito可以基于Flex SDK 4.5 (Hero)開發(fā)一個(gè)AIR2.5的應(yīng)用,對于Flash Pro用戶來說,使用裝有AIR for Android插件的Flash Pro CS5同樣可以方便快速地開發(fā)一個(gè)手機(jī)應(yīng)用。

如果你沒有安裝Flash Profession CS5,請到這里下載試用版,然后再到Adobe實(shí)驗(yàn)室下載AIR2.5開發(fā)插件(Beta 2),安裝成功后打開Flash,在開始畫面中新建一個(gè)AIR for Android文檔。這篇帖子用MAC 英文版的Flash Pro舉例。

在Flash Profession CS5中新建一個(gè)AIR for Android項(xiàng)目。

圖1. 在Flash Profession CS5中新建一個(gè)AIR for Android項(xiàng)目

由于安裝了AIR2.5開發(fā)包,F(xiàn)lash Professional CS5便可以作為一個(gè)發(fā)布AIR2.5的工具,打開Publish Settings,看到Flash的發(fā)布環(huán)境是AIR Android,點(diǎn)擊右面的設(shè)置按鈕,可以進(jìn)入AIR2.5的發(fā)布設(shè)置面板:

AIR2.5的發(fā)布設(shè)置面板

圖2. AIR2.5的發(fā)布設(shè)置面板

General里是一些關(guān)于應(yīng)用的基本信息,Android平臺下的應(yīng)用安裝包是APK文件,在這個(gè)面板里可以直接給APK文件命名,并且定義應(yīng)用程序名稱。需要注意的是在App ID這一項(xiàng)里可以定義應(yīng)用程序ID,id值不能有下劃線等特殊字符,否則編譯的時(shí)候會報(bào)錯(cuò)。

在Aspect ratio里可以設(shè)置應(yīng)用在手機(jī)中的顯示方式為橫向(landscape)或者縱向(portrait)。也可以指定是否全屏或者是否按設(shè)備的傾斜方向自動調(diào)整橫縱顯示(Auto orientation)。

接下來是設(shè)置圖像的渲染方式,這里有三個(gè)選項(xiàng)Auto,CPU和GPU,如果選擇了GPU,會優(yōu)先使用設(shè)備的顯卡來渲染圖像,不同的設(shè)備顯卡有不同的限制,所以如果選擇這一項(xiàng)需要在多個(gè)設(shè)備中測試以確保無誤。Android的GPU有如下幾點(diǎn)限制:

  • 不支持濾鏡效果
  • 不支持PixelBender的圖片疊加和填充效果
  • 不支持以下的圖像疊加效果:layer,alpha,erase,overlay,hardlight,lighten,darken
  • 不建議選擇GPU來渲染視頻

如果使用GPU渲染,軟鍵盤打開時(shí)輸入框不會自動調(diào)整到可視范圍內(nèi),所以需要將文本框位置固定在上半屏。

如果一個(gè)顯示對象不能被GPU渲染,比如加了濾鏡的影片剪輯,它會完全不顯示。

在Deployment面板中設(shè)置部署和發(fā)布參數(shù)

圖3. 在Deployment面板中設(shè)置部署和發(fā)布參數(shù)

Deployment是部署和發(fā)布的一些設(shè)置,如同發(fā)布一個(gè)桌面版的AIR應(yīng)用程序一樣,發(fā)布Android AIR也需要驗(yàn)證。
在Android部署類型(Deployment Type)中可以選擇Device release,Emulator release和Debug。如果選擇了Debug,可以通過網(wǎng)絡(luò)在設(shè)備與Flash間建立一個(gè)測試環(huán)境,在Flash里打開Debug->Begin Remote Debug Session->ActionScript 3.0,并且在設(shè)備中顯示的對話框中輸入主機(jī)的IP地址和主機(jī)名稱。
After publishing可以選擇安裝應(yīng)用到設(shè)備中,并且同時(shí)運(yùn)行應(yīng)用,建議勾選兩項(xiàng)。

Icons 是用來設(shè)置應(yīng)用的顯示圖標(biāo)(36×36, 48×48, 72×72),圖片支持PNG文件。

在Permissions中設(shè)置INTERNET權(quán)限

圖4. 在Permissions中設(shè)置INTERNET權(quán)限

Permissions是設(shè)置應(yīng)用的訪問權(quán)限,因?yàn)楸纠枰_發(fā)一個(gè)P2P的網(wǎng)絡(luò)應(yīng)用,所以需要選擇INTERNET這一項(xiàng)。

接下來就是在移動設(shè)備上(本例為HTC Desire)的設(shè)置,打開設(shè)置->應(yīng)用程序->開發(fā),選擇"USB調(diào)試",便可以使用USB將設(shè)備與電腦連接,并發(fā)布一個(gè)AIR2.5應(yīng)用。

使用FLASH P2P技術(shù)在局域網(wǎng)內(nèi)搭建一個(gè)NETGROUP連接

Flash P2P (Pear to Pear)技術(shù)允許各個(gè)聯(lián)網(wǎng)客戶端使用Real-Time Media Flow Protocol (RTMFP)協(xié)議進(jìn)行點(diǎn)對點(diǎn)通訊。在廣域網(wǎng)需要連接到支持RTMFP協(xié)議的服務(wù)器,在局域網(wǎng)則不需要服務(wù)器,可以使用組播地址(Multicast address)進(jìn)行通訊。P2P需要通過用戶數(shù)據(jù)報(bào)協(xié)議(UDP)來傳輸數(shù)據(jù),所以確保你的網(wǎng)關(guān)沒有阻止UDP協(xié)議。
如果你不確定你的設(shè)備是否支持UDP通訊,請用手機(jī)瀏覽器訪問這個(gè)網(wǎng)址http://cc.rtmfp.net來自動檢測你的網(wǎng)絡(luò)狀態(tài)。

這里介紹一個(gè)在局域網(wǎng)內(nèi)建立P2P的例子,基本思路是建立一個(gè)NetConnection,然后搭建一個(gè)NetGroup,也就是通訊團(tuán)隊(duì),最后與團(tuán)隊(duì)中其他鄰居進(jìn)行廣播通訊。

使用NetConnection建立連接,如果參數(shù)為"rtmfp:",則會建立一個(gè)局域網(wǎng)連接。

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

使用NetGroup建立通訊團(tuán)隊(duì),在GroupSpecifier里可以指定團(tuán)隊(duì)id,通過它可以建立PIN碼來進(jìn)行用戶過濾。按下面的代碼可以建立一個(gè)NetGroup團(tuán)隊(duì),如果要搭建局域網(wǎng)P2P,則必須使用組播地址(Multicast Address), 并且指定地址IP和端口,請查閱這里了解更多關(guān)于組播地址的信息。

  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事件來獲取網(wǎng)絡(luò)狀態(tài),NetStatusEvent偵聽器是團(tuán)隊(duì)內(nèi)通訊的窗口。如果鄰居連接到了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; 

需要注意的幾點(diǎn)問題:

首次連接的時(shí)間根據(jù)網(wǎng)絡(luò)狀態(tài)的不同可能會很長,尤其是無線網(wǎng)絡(luò)。
使用手機(jī)的WiFi熱點(diǎn)來建立連接,熱點(diǎn)機(jī)與電腦無法連接。

運(yùn)行效果

圖5. 運(yùn)行效果

關(guān)于作者

李鵬(James Li),2001年畢業(yè)于吉林大學(xué)商學(xué)院,同年接觸Photoshop,Illustrator和Flash。畢業(yè)后一直在從事Flash的設(shè)計(jì)與開發(fā),在教育、IT、互聯(lián)網(wǎng)廣告等不同領(lǐng)域里做過4年的Flash設(shè)計(jì)師和5年的AIR程序開發(fā),期間曾在2006與2008年兩次去德國工作,對Flash前端交互設(shè)計(jì)有獨(dú)到的見解和豐富的經(jīng)驗(yàn)。

責(zé)任編輯:佚名 來源: jamesli.cn/blog
相關(guān)推薦

2009-07-22 15:52:01

2009-01-18 09:36:00

2010-03-22 15:27:40

云計(jì)算

2024-08-06 14:03:35

2012-12-10 09:46:21

P2P云存儲Symform

2009-01-08 09:52:00

2010-07-13 14:41:14

2020-03-05 20:30:15

Syncthing文件同步工具開源

2022-07-19 16:59:04

流媒體傳輸IPC物聯(lián)網(wǎng)

2024-04-03 08:25:52

2010-12-13 13:17:36

360網(wǎng)速保護(hù)P2P下載

2009-05-18 09:11:00

IPTV融合寬帶

2010-06-28 11:15:45

BitTorrent協(xié)

2012-09-25 13:47:43

C#網(wǎng)絡(luò)協(xié)議P2P

2015-04-27 11:49:23

2018-08-16 07:29:02

2011-03-09 11:09:07

Skiller限速局域網(wǎng)

2013-03-13 09:24:56

2010-07-07 10:31:45

2013-12-12 13:46:40

大數(shù)據(jù)金融P2P大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號