紅外線是波長在750nm至1mm之間的電磁波,它的頻率高于微波而低于可見光,是一種人的眼睛看不到的光線。紅外通信一般采用紅外波段內的近紅外線,波長在0.75um至25um之間。紅外數據協會(IRDA)成立后,為了保證不同廠商的紅外產品能夠獲得最佳的通信效果,紅外通信協議將紅外數據通信所采用的光波波長的范圍限定在850至900nm之內。
IRDA標準包括三個基本的規范和協議:物理層規范(Physical Layer Link Specification)、鏈接建立協議(Link Access Protocol:IrLAP)和鏈接管理協議(Link Management Protocol:IrLMP)。物理層規范制定了紅外通信硬件設計上的目標和要求,IrLAP和IrLMP為兩個軟件層,負責對鏈接進行設置、管理和維護。在IrLAP和IrLMP基礎上,針對一些特定的紅外通信應用領域,IRDA還陸續發布了一些更高級別的紅外協議,如TinyTP、IrOBEX、IrCOMM、IrLAN、IrTran-P和IrBus等等(見圖1)。

事實上,Sun對基于Palm的Java程序設計提供了兩種方法:一種是利用CLDC+KJava;另一種是利用CLDC+MIDP,然后通過MIDP4Palm將MIDP轉換為Palm上可以運行的程序。前一種為編程方式,它無論從功能、對漢字的支持、還是運行速度上都高于后者,但是前一種提供的Java虛擬機KVM是單色的,不過可以選用完全兼容KVM的KAWT虛擬機來彌補此缺憾。后一種編程方式沒有提供對紅外口操作的類庫或方法。
Sun公司的J2ME中的CLDC1.x,KJava為Palm提供了紅外通信的API功能包。在KJava的API中,Palm 應程序中的主程序必須從J2ME的Spotlet類派生而來。

Spotlet類提供了Palm經過紅外口發送數據的靜態方法beamSend()。在Palm應用程序中,只需要將待經紅外線發送的數據轉化為字節數組,直接利用beamSend()就可以將數據經紅外口發送給別的設備,見下面程序代碼。
|
對于紅外線數據的接收,Spotlet類提供了 beamReceive(byte[]) 方法,將經紅外口接收到的數據存儲到一個字節數組中,進一步通過對此字節數組操作(如將其轉化為字符串等),可以將獲得的數據顯示出來,見下面程序代碼。
|
Palm紅外線數據傳輸應用程序的編寫,取決于經紅外線通信的雙方。通信的雙方必須將接受紅外線設置為Beam Receive: on。雙方必須安裝相應的紅外通訊軟件。
在此假設通信的雙方均是Palm掌上電腦,雙向使用紅外線聊天系統。通信的雙方可以采用相同的程序。系統的主要設計思路是:在Palm J2ME程序GUI中,構造兩個TextField用于對話框,一個用于發送數據,另一個用于顯示經紅外口接收到的數據,然后在構造幾個按鈕,完成數據的發送、程序退出等(見圖3)。

程序說明如下 :
(1)構造類BeamDemo,由于BeamDemo屬于Palm 的J2ME程序的入口類必須由Spotlet派生,同時BeamDemo完成DialogOwner類(該類是否完成implements可選)如圖4所示。

(2)設置BeamDemo的程序入口,代碼如下。
|
Spotlet.register()的系統注冊事件可以有兩種:
一種為NO_EVENT_OPTIONS。如果注冊了此類事件,Palm的幾個功能鍵仍然可以被PalmOS操作系統使用。因此,由Spotlet派生來的程序可以不用設置程序的退出,直接由Palm的按鈕完成。
另一種為WANT_SYSTEM_KEYS。如果注冊了此類事件,Palm的幾個功能鍵不被PalmOS操作系統使用,只能由程序控制使用。因此,由Spotlet派生來的程序,必須設置程序的退出退出代碼,如:
|
否則系統無法退出。只有Reset Palm才能使系統退出。系統事件類型為使用系統鍵,該程序運行后會屏蔽系統鍵的功能,這樣可以提高系統響應速度。
(3)用戶界面的構造
為了演示Palm紅外線的通信功能,我們在此只構造3個按鈕、1個textField和1個textBox(如圖3)。
|
(4)為了監聽系統紅外線口,必須重載Spotlet的beamReceive事件,Palm監聽的數據是原始的字節,如果由數據到來,就將數據讀入字節數組data[]中,將data[]構造出字符串,寫入textBox1,代碼如下:
|
(5)設置經過紅外口,發送的內容。在BeamDemo程序中,使用textField2的內容作為要發送的數據。由于該數據是字符串,所以可以直接將字符串轉換為字節數組,通過beamSend方法以字節的形式經過Palm紅外口發送出。
|
總體來講,Palm J2ME紅外程序的編寫并不復雜,但要注意數據的發送是通過Spotlet的靜態方法static booolean beamSend(byte[])實現的,而數據的獲得必須重載beamReceive(byte[]) 方法,來提取接收的數據。另外,要注意Palm的模擬器POSE到目前為止并不支持紅外線通信的模擬,該程序的調試必須在兩臺真實的Palm上進行。
在日常生活中,許多紅外線遙控器都發送紅外線指令給被控制電器?梢岳蒙鲜龀绦,將紅外線遙控器對準Palm的紅外口,由Palm捕獲紅外線遙控器發出的字節,并存放于Palm的內部數據庫中,然后利用static booolean beamSend(byte[])發送給被控制電器,就會驚喜地發現,Palm完全可以替代紅外線遙控器。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/
領測軟件測試網最新更新
關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月