《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > 基于J2ME的手機(jī)相冊(cè)系統(tǒng)

基于J2ME的手機(jī)相冊(cè)系統(tǒng)

2009-01-15
作者:付冬 張曉明

1 引言?

??? 有關(guān)資料表明,到2005年,全球的移動(dòng)電話將超過(guò)14億部,移動(dòng)電話深入每個(gè)人的生活,讓具有“無(wú)線通信、隨身攜帶”特性的移動(dòng)電話伴隨著因特網(wǎng)的發(fā)展使得移動(dòng)應(yīng)用前景無(wú)限。目前,手機(jī)上的軟件發(fā)展經(jīng)歷了三個(gè)階段: 最早只有基本的語(yǔ)音服務(wù),其后增加了簡(jiǎn)單的附加應(yīng)用,接著出現(xiàn)了WAP 方式使移動(dòng)終端能訪問(wèn)Internet 的功能。發(fā)展到當(dāng)前這個(gè)階段,利用J2ME(Java 2 Micro Edition) 實(shí)現(xiàn)移動(dòng)應(yīng)用是一種良好的途徑。?

?? ?隨著人們物質(zhì)文化水平的提高,數(shù)碼產(chǎn)品已經(jīng)步入了百姓的日常生活,越來(lái)越多來(lái)的人擁有了數(shù)碼相機(jī)或數(shù)碼攝像機(jī)。這些設(shè)備拍攝的照片只能利用特殊的設(shè)備才可以瀏覽,那么如果我們可以利用隨身攜帶的手機(jī)查看數(shù)碼照片將是一件非常理想的事情。?

??? 基于這一想法,我們?cè)O(shè)計(jì)了這個(gè)基于J2ME手機(jī)相冊(cè)系統(tǒng)。這個(gè)系統(tǒng)利用了J2ME和流技術(shù)實(shí)現(xiàn)對(duì)數(shù)碼照片的顯示。用戶(hù)將自己的照片發(fā)布到相應(yīng)的 web服務(wù)器上,可以隨時(shí)通過(guò)手機(jī)登陸該網(wǎng)站,訪問(wèn)自己的數(shù)碼照片,把網(wǎng)站的地址告訴親朋則可以與大家分享這些美麗的瞬間。?

2 相關(guān)技術(shù)介紹?

2.1 J2ME介紹?

??? Sun 在1999年6月時(shí)推出了 Java 2袖珍版 (J2ME)來(lái)滿(mǎn)足消費(fèi)電子和嵌入設(shè)備的需要。J2ME是為了那些使用有限的能源、有限的網(wǎng)絡(luò)連接(常常是無(wú)線連接)以及有限圖形用戶(hù)界面能力的設(shè)備開(kāi)發(fā)的。J2ME針對(duì)硬件的數(shù)據(jù)處理能力、存儲(chǔ)容量、網(wǎng)絡(luò)連接能力等規(guī)定了Configuration的概念,把上述運(yùn)算功能有限、電力有限的嵌入式裝置定義在Connected Limited Device Configuration(CLDC)規(guī)格之中;而另外一種裝置則規(guī)范為Connected Device Configuration(CDC)規(guī)格。CLDC所使用的java虛擬機(jī)稱(chēng)為KVM,而CDC所使用的則稱(chēng)為CVM。J2ME的體系結(jié)構(gòu)如圖1所示。?

圖1 java2 平臺(tái)?

2.2 J2ME與Web的Http連接?

??? Web由客戶(hù)與服務(wù)器組成??蛻?hù)是簡(jiǎn)單由TCP/IP加上Web瀏覽器組成,WEB服務(wù)器由HTTP加后臺(tái)數(shù)據(jù)庫(kù)組成。客戶(hù)的瀏覽器和服務(wù)器用TCP/IP的HTTP(超文本傳輸協(xié)議)建立連接,使得客戶(hù)與服務(wù)器二者的超媒體傳輸變得很容易。所有的客戶(hù)及WEB服務(wù)器統(tǒng)一使用TCP/IP,統(tǒng)一分配IP,使得客戶(hù)和服務(wù)器的邏輯連接變成簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)連接。URL(統(tǒng)一資源定位器)實(shí)現(xiàn)了單一文檔能在整個(gè)國(guó)際互聯(lián)網(wǎng)主機(jī)中的定位??蛻?hù)的請(qǐng)求通過(guò)WEB服務(wù)器的CGI(公用網(wǎng)關(guān)接口)可以很好地與后臺(tái)的各種類(lèi)型數(shù)據(jù)接口。?

??? J2ME 提供了HTTP ,TCP 等高級(jí)Internet協(xié)議,使移動(dòng)電話能直接訪問(wèn)已有Internet 的全部信息, 通過(guò)它能讓用戶(hù)方便地實(shí)現(xiàn)手機(jī)網(wǎng)與Internet的互連和資源共享。?

2.3 流技術(shù)?

??? Java流在處理上分為字符流和字節(jié)流。字符流處理的單元為2個(gè)字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為1個(gè)字節(jié),操作字節(jié)和字節(jié)數(shù)組。Java內(nèi)用Unicode編碼存儲(chǔ)字符,字符流處理類(lèi)負(fù)責(zé)將外部的其他編碼的字符流和java內(nèi)Unicode字符流之間的轉(zhuǎn)換。java對(duì)網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收處理,也借用了一般流處理的方法。JDK1.4中新增加了新的I/O流處理,其中緩沖區(qū)管理和通道(Channel)概念則是對(duì)網(wǎng)絡(luò)數(shù)據(jù)流的收發(fā)處理支持的強(qiáng)化。緩沖區(qū)管理中ByteBuffer類(lèi)更好的支持了網(wǎng)絡(luò)數(shù)據(jù)流處理。在網(wǎng)絡(luò)連接中,通道代表了sockets的連接。我們正是利用字節(jié)流DataOutputStream來(lái)向Web服務(wù)器傳送消息,而利用字節(jié)流DataInputStream接收從服務(wù)器返回的信息,從而實(shí)現(xiàn)了手機(jī)共享Internet的資源。?

3 系統(tǒng)的設(shè)計(jì)思想?

??? 手機(jī)相冊(cè)實(shí)際上是通過(guò)Http協(xié)議使手機(jī)與服務(wù)器和數(shù)據(jù)庫(kù)連接,使用流技術(shù)來(lái)傳送數(shù)據(jù)信息,使得手機(jī)用戶(hù)可以看到服務(wù)器上存放的數(shù)碼照片,服務(wù)器起到的是手機(jī)與照片資源之間通信的橋梁作用。?

???手機(jī)用戶(hù)將通過(guò)Internet訪問(wèn)數(shù)據(jù)庫(kù),經(jīng)過(guò)身份驗(yàn)證后將需求告訴服務(wù)器,服務(wù)器把用戶(hù)請(qǐng)求的資源以流的形式進(jìn)行包裝,并傳送給手機(jī)用戶(hù)。J2ME在手機(jī)上接收流,并將數(shù)據(jù)重組為圖像,顯示在手機(jī)屏幕上。當(dāng)用戶(hù)發(fā)出結(jié)束命令,這時(shí)服務(wù)器將發(fā)出信號(hào)要求結(jié)束與服務(wù)器連接,提示用戶(hù)是否斷開(kāi)網(wǎng)絡(luò),若用戶(hù)選擇斷開(kāi)網(wǎng)絡(luò),則關(guān)閉網(wǎng)絡(luò)連接。由此可見(jiàn)本系統(tǒng)的關(guān)系圖如圖2所示。

圖2 體系結(jié)構(gòu)圖?

4關(guān)鍵問(wèn)題的解決?

4.1手機(jī)與web服務(wù)器的連接?

??? 目前有多種與web服務(wù)器連接方式,為了使其使用方便和便于理解,本系統(tǒng)使用了HTTP的聯(lián)結(jié)方式。通過(guò)對(duì)HttpConnection類(lèi)進(jìn)行編程可以實(shí)現(xiàn)手機(jī)與Web服務(wù)器的Http連接,利用DataOutputStream類(lèi)可以把向服務(wù)器發(fā)送的命令封裝進(jìn)流中進(jìn)行傳送。手機(jī)端的部分連接代碼如下:?

HttpConnection hpc = null;?

DataOutputStream dos = null;?

strIp = "http://127.0.0.1:8080 /Login.jsp ";?

try {?

hpc = (HttpConnection) Connector.open(strIp, Connector.READ_WRITE);?

hpc.setRequestMethod(HttpConnection.POST);?

hpc.setRequestProperty("Content-Type",?

?? ????????????????????????????"application/x-www-form-urlencoded");?

dos = new DataOutputStream(hpc.openDataOutputStream());?

dos.write( ("no=" + stname).getBytes());?

dos.write("&".getBytes());?

dos.write( ("pass=" + stpass).getBytes());?

dos.close();?

……?

}?

??? 通過(guò)以上代碼,可以實(shí)現(xiàn)連接web服務(wù)器,并且post出去兩個(gè)參數(shù),以便服務(wù)器驗(yàn)證用戶(hù)身份。其他向服務(wù)器傳送命令的代碼類(lèi)似。?

??? 當(dāng)MySearch.jsp得到MyGet參數(shù)時(shí),JSP得到服務(wù)器上存放照片文件夾的圖像文件列表,將文件名逐一傳送到客戶(hù)端。?

String jname=request.getParameter("MyGet");?

if(jname.equals("IsOk")){?

……?

out.print(XXX.png); //循環(huán)打印文件名?

……?

}?

??? 在手機(jī)客戶(hù)端利用DataInputStream類(lèi)接收數(shù)據(jù),再將的到的文件名顯示再手機(jī)屏幕上,以便用戶(hù)選擇瀏覽。其代碼如下:?

HttpConnection hpc = null;?

DataInputStream dis = null;?

hpc = (HttpConnection) Connector.open(localUrl, Connector.READ_WRITE);?

……?

dis = new DataInputStream(hpc.openDataInputStream());?

StringBuffer b = new StringBuffer();?

int ch;?

while ( (ch = dis.read()) != -1) {?

……?

}?

……?

4.2利用流傳輸文件及文件的再現(xiàn)?

??? 手機(jī)得到web服務(wù)器上的文件可以通過(guò)多種方式,例如利用XML進(jìn)行包裝,利用Socket技術(shù),利用流技術(shù)進(jìn)行傳送等。為了減少手機(jī)和服務(wù)器的負(fù)擔(dān),提高效率,減少代碼本系統(tǒng)采用流技術(shù)傳送圖像文件。在手機(jī)端利用InputStream類(lèi)接收得到的圖像信息數(shù)據(jù)。其代碼如下:?

public Image MyImage;?

public String ImageName;?

……?

HttpConnection con = null;?

InputStream ins = null;?

String MyIp = "http://127.0.0.1:8080/"+ ImageName;?

try {?

??? con = (HttpConnection) Connector.open(MyIp, Connector.READ_WRITE);?

??? ……?

??? ins = con.openDataInputStream();?

??? MyImage = Image.createImage(ins);?

}?

……?

??? 向web服務(wù)器提出申請(qǐng)后,服務(wù)器會(huì)返回用戶(hù)請(qǐng)求的資源,圖像文件備包裝進(jìn)一個(gè)Stream發(fā)送給用戶(hù)。J2ME利用InputStream來(lái)接收輸入流,并利用Image的createImage方法將數(shù)據(jù)流轉(zhuǎn)換為Image類(lèi)型,以便在手機(jī)上顯示。?

5 總結(jié)?

??? 本文給出了一個(gè)基于J2ME 的個(gè)人相冊(cè)的設(shè)計(jì)和實(shí)現(xiàn),保證了用戶(hù)及時(shí)地通過(guò)移動(dòng)終端訪問(wèn)服務(wù)器上的照片。采用流作為數(shù)據(jù)交換的工具,實(shí)現(xiàn)了文件的遠(yuǎn)程傳遞和重組。。利用當(dāng)前使用最廣泛的HTTP 通信協(xié)議,將傳統(tǒng)的Internet 網(wǎng)站與移動(dòng)終端相結(jié)合,驗(yàn)證了建立移動(dòng)個(gè)人相冊(cè)的可行性。并為實(shí)現(xiàn)基于J2ME 的小型移動(dòng)圖像瀏覽系統(tǒng)提供了一種可行的方案。?

6 參考文獻(xiàn)?

[1] Connected Limited Device Configuration Specification Version 1.0a.?

[2] J2ME CLDC API 1.0.?

[3] Mobile Information Device Profile(JSR-37) JCP Specification.?

[4] Java Mobile Information Device Profile (MIDP) 1.0.3 Reference Implementation API. 2? ?

[5] JohnMuchow. CoreJ2MEtechnologyandMIDP [S].SunMicrosystemsPress. 2002.?

[6] RAJU Srikanth . Designing Thin Clients and Wireless Application[ EB/ OL ] . http :/ / develop. java. sun. com/ developer/ online2Training/ webcasts/Madrid/ pdf/ sr thin. pdf ,2001212208.?

[7]JAVA2platform.MicroEdition. http://java.sun.com/j2me/index.html?

[8] 中國(guó)JAVA手機(jī)網(wǎng).http://www.cnjm.net?

[9][美]RogerRiggs,等.J2ME無(wú)線設(shè)備編程[M].北京:機(jī)械工業(yè)出版社,2002.?

[10] 趙剛,等.Wireless Programming with J2ME:Cracking the Code[M] . 北京:電子工業(yè)出版社,20021?

[11] 黃聰明.Java 移動(dòng)通信程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002. 228.?

[12] 盧軍.J2ME 應(yīng)用程序開(kāi)發(fā)[M].北京:中國(guó)鐵道出版社,2002. 7215.?

[13] 胡靜.基于J2ME 的無(wú)線Internet 應(yīng)用方案[J ].江蘇通信技術(shù),2002 , 18(4) :17219.?

[14] 李迅. J2ME 無(wú)線設(shè)備編程[M].北京:機(jī)械工業(yè)出版社,2002.?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。