饒榮慶 -- 您今天UCWEB了嗎?--http://www.ucweb.com

          3G 手機(jī)開(kāi)發(fā)網(wǎng)

             :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          關(guān)鍵字: J2ME       
                開(kāi)發(fā)手機(jī)程序,最能想到的就是對(duì)SMS(Short Messaging Service), MMS(Multimedia Messaging Service),Email的支持。
          對(duì)于SMS, MMS,sun官方已經(jīng)出了個(gè)jsr-205,jsr-102規(guī)范對(duì)其進(jìn)行了完善的支持。至于Email嗎,介紹完前兩個(gè)后,我再把我的想法說(shuō)出來(lái),大家參考下。

          一。前言
          學(xué)習(xí) Java™ Micro Edition(Java ME)無(wú)線消息 API。這個(gè)專欄將從幾個(gè)簡(jiǎn)單的代碼示例開(kāi)始,隨后討論它為企業(yè)開(kāi)發(fā)人員帶來(lái)的各種機(jī)會(huì)。
          <!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

          移動(dòng)電話最常見(jiàn)的一個(gè)特性就是消息傳遞。文本消息或短消息(SMS)自引入之初,已經(jīng)變得越來(lái)越流行。當(dāng)然,多媒體消息(MMS)又為其增加了圖片、聲音和視頻等多媒體內(nèi)容。

          在 MMS 剛出現(xiàn)時(shí),有些專家預(yù)言它會(huì)取代 SMS,如果它的價(jià)格不是這么高的話,這個(gè)預(yù)言確實(shí)有可能會(huì)成為現(xiàn)實(shí)。即便如此,這種能在手機(jī)之間傳遞多媒體內(nèi)容的功能還是漸受青睞。最近手機(jī)電子郵件的 成功,意味著未來(lái)手機(jī)消息傳遞的主要形式可能是電子郵件,但是要到那一步還有很長(zhǎng)的一段路要走。

          二。無(wú)線消息
           JSR-205 中定義的無(wú)線消息 API(WMA)2.0 是用于無(wú)線消息的一組可選 API。WMA 的連接基于通用連接框架,該框架是在基于 CLDC 的 Java ME 架構(gòu)中進(jìn)行通信的基礎(chǔ)。WMA 2.0 向后兼容 WMA 1.1,添加了對(duì)發(fā)送和接收多媒體消息的支持。換句話說(shuō),無(wú)線消息 API 提供了無(wú)線通信的高級(jí)抽象。它將傳輸層完全隱藏,因而所要做的工作只是創(chuàng)建消息、發(fā)送消息和接收消息。

          WMA 支持文本消息、小區(qū)廣播和多媒體消息。文本消息很簡(jiǎn)單,大多數(shù)人都知道它是什么。SMS 消息極為流行,而且已經(jīng)成為日常生活的一部分。WMA 支持發(fā)送和接收文本消息。發(fā)送非常簡(jiǎn)單:只需定義目標(biāo)地址和文本,文本被稱為 凈荷(payload) 。接收稍微復(fù)雜些,因?yàn)樾枰獞?yīng)用程序能夠偵聽(tīng)進(jìn)入的消息。在下面的示例中將看到如何讀取進(jìn)入的消息。

          這里介紹下jsr-102規(guī)范是針對(duì)WMA1.1的。 比較詳細(xì)的資料可以google下。jsr205規(guī)范完全向下兼容,也就是說(shuō)。你在jsr-102寫(xiě)的程序可以不用任何修改就可以運(yùn)行在jsr-205規(guī)范下。

          消息內(nèi)容

          二進(jìn)制消息顧名思義就是帶有二進(jìn)制內(nèi)容的消息。內(nèi)容可以是要傳遞給應(yīng)用程序或者從應(yīng)用程序傳遞給其他客戶機(jī)或服務(wù)器的任何內(nèi)容。多部分消息可以包含多塊媒體,例如文本、音頻和視頻。

          小區(qū)廣播可能是最不為人所知的消息類型。小區(qū)廣播服務(wù)是一種數(shù)據(jù)服務(wù),在這種服務(wù)中,消息由基站廣播,由偵聽(tīng)這個(gè)基站的每個(gè)移動(dòng)站接收。這個(gè)服務(wù)是單向的,這意味著 WMA 只能用來(lái)接收這類消息。

          發(fā)送和接收

          發(fā)送文本消息很簡(jiǎn)單。步驟如下:

          • 設(shè)置手機(jī)號(hào)碼(地址)。
          • Connector 接口創(chuàng)建 MessageConnection
          • 創(chuàng)建新消息,并把它的類型轉(zhuǎn)換成 TextMessage
          • 設(shè)置凈荷。
          • 通過(guò)調(diào)用 send() 方法并向方法傳遞 Message 實(shí)例,發(fā)送消息。

          發(fā)送的消息中包含的發(fā)送人信息,與正常發(fā)送消息時(shí)的相同。顯示了使用 Java ME WMA 發(fā)送消息的代碼。

           

          java 代碼
           
          1. try {   
          2.   String addr = ?ms://+358401234567?   
          3.   MessageConnection conn = (MessageConnection) Connector.open(addr);   
          4.   TextMessage msg =   
          5.    (TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);   
          6.   msg.setPayloadText(?his is a test message!?;   
          7.   conn.send(msg);   
          8. } catch (Exception e) {   
          9. ...   
          10. }   

          接收文本消息略微復(fù)雜,但也不是太復(fù)雜。在一個(gè)端口上打開(kāi) MessageConnection (在這個(gè)示例中是 5432)并從 MessageConnection 讀取進(jìn)入的消息。可以用 instanceof 測(cè)試消息的類型。要接收有消息進(jìn)入的通知,應(yīng)用程序必須實(shí)現(xiàn) MessageListener 接口,所以要編寫(xiě)比  更復(fù)雜一些的代碼,才能讓它真正工作。


           

          java 代碼
           
          1. try {   
          2.   String addr = ?ms://:5432?   
          3.   MessageConnection conn = (MessageConnection) Connector.open(addr);   
          4.   Message msg = null;   
          5.   while (someExitCondition) {   
          6.     msg = conn.receive();   
          7.     if (msg instanceof TextMessage) {   
          8.            TextMessage tmsg = (TextMessage)msg;   
          9.            String receivedText = tmsg.getPayloadText();   
          10.            // respond with the same text with ?hanks.?  
          11.      tmsg.setPayloadText(?hanks?;   
          12.      conn.send(tmsg);   
          13.     } else {   
          14.        // Received message was not a text message, but e.g. binary   
          15.        ...   
          16.     }   
          17.   } // end while  
          18.   } catch (Exception e) {   
          19.    ...   
          20. }   

          發(fā)送二進(jìn)制消息與發(fā)送文本消息很相似。首先需要把數(shù)據(jù)放在字節(jié)數(shù)組中,然后創(chuàng)建 MessageConnection(如 清單 3 BINARY_MESSAGE


           

          java 代碼
          1. try {  
          2.   String str = "Hello!";  
          3.   byte[] msg = str.getBytes();  
          4.   String addr = "sms://+358401234567";   
          5.   MessageConnection conn = (MessageConnection) Connector.open(addr);   
          6.       
          7.   BinaryMessage bm = (BinaryMessage)mc.newMessage  
          8.                      (MessageConnection.BINARY_MESSAGE);  
          9.   if (url!= null)  
          10.     bm.setAddress(url);  
          11.     bm.setPayloadData(msg);  
          12.     conn.send(bm);  
          13.     }  
          14.   catch(Exception e) {  
          15. }  

          三類消息傳遞

          WMA 消息的傳遞可以分成:服務(wù)器到手機(jī)、手機(jī)到服務(wù)器和手機(jī)到手機(jī)。

          服務(wù)器到手機(jī) 消息傳遞中,CRM 應(yīng)用程序可以向手機(jī)應(yīng)用程序發(fā)送數(shù)據(jù),手機(jī)應(yīng)用程序可以接收數(shù)據(jù)并用對(duì)用戶友好的方式呈現(xiàn)數(shù)據(jù)。在 手機(jī)到服務(wù)器 的消息傳遞中,手機(jī)應(yīng)用程序可以向服務(wù)器發(fā)送數(shù)據(jù)(HTTP 連接也可以做這項(xiàng)工作,但 HTTP 連接不可能總是存在)。在 手機(jī)到手機(jī) 的消息傳遞中,用戶可以向好友的手機(jī)發(fā)送應(yīng)用程序數(shù)據(jù)或游戲數(shù)據(jù),進(jìn)行游戲項(xiàng)目交換及其他操作。

          上面大部分文字摘自 www.ibm.com/developerworks/cn/java/wi-arch32.html  

          整理成一個(gè)工具類
          java 代碼
           
          1. public final static void sendTextMessage(String phone, String text)   
          2.     throws IOException {  
          3.         checkPhoneNumber(phone);  
          4.         MessageConnection conn = (MessageConnection) Connector.open("sms://"  
          5.                 + phone);  
          6.         TextMessage msg = (TextMessage) conn  
          7.                 .newMessage(MessageConnection.TEXT_MESSAGE);  
          8.         msg.setPayloadText(text);  
          9.         conn.send(msg);   
          10.     }  
          11.        
          12.     public final static void sendTextBinary(String phone, byte[] text)   
          13.     throws IOException {  
          14.         checkPhoneNumber(phone);  
          15.         MessageConnection conn = (MessageConnection) Connector.open("sms://"  
          16.                 + phone);  
          17.         BinaryMessage bm = (BinaryMessage) conn  
          18.                 .newMessage(MessageConnection.BINARY_MESSAGE);  
          19.   
          20.         bm.setAddress(phone);  
          21.         bm.setPayloadData(text);  
          22.         conn.send(bm);  
          23.    
          24.     }  
          25.       
          26.     private final static void checkPhoneNumber (String phone)   
          27.     throws PhoneNumberException{  
          28.         if(phone == null  
          29.                 || phone.equals("")){  
          30.             throw new PhoneNumberException("手機(jī)號(hào)碼不能為空!");  
          31.         }  
          32.         try{  
          33.             Integer.parseInt(phone);  
          34.         }catch(NumberFormatException n){  
          35.             throw new PhoneNumberException("手機(jī)號(hào)碼必須為數(shù)據(jù)!");  
          36.         }  
          37.     }  

          這篇文章會(huì)持續(xù)更新中,請(qǐng)關(guān)注

          更新一。對(duì)Email 的支持:有用過(guò)手機(jī)支持email瀏覽是比較痛苦的。就單純拿我的nokia6630來(lái)說(shuō)吧。設(shè)置就一大堆了。搞的我都不想去設(shè)置了。其實(shí)對(duì)于手機(jī)瀏覽 email來(lái)說(shuō)我們直需要其中的文本信息就ok了(如果郵件帶有附件(一般附件是word,圖片等)對(duì)于智能機(jī)來(lái)說(shuō),是可以通過(guò)安裝office來(lái)支持瀏 覽的,但很辛苦。
          該怎么樣來(lái)省去那些麻煩的設(shè)置呢,我們只需要用戶提供一個(gè)郵箱地址,密碼就可以登錄到郵箱跟發(fā)郵件了,對(duì)于那些協(xié)議的設(shè)置我們來(lái)幫它們做。
          比如設(shè)計(jì)一個(gè)自己的郵件轉(zhuǎn)發(fā)服務(wù)器。一個(gè)郵件客戶端(j2me)實(shí)現(xiàn),然后客戶端的所有請(qǐng)求都是通過(guò)我們這邊的服務(wù)器進(jìn)行工作,我們可以把那些郵件數(shù)據(jù)進(jìn)行壓縮,后在傳送,這樣不僅可以提高速度,而且處理起來(lái)也是比較方便的。
          過(guò)段時(shí)間,決定自己實(shí)現(xiàn)一個(gè)這樣的結(jié)構(gòu)。




          爬蟲(chóng)工作室 -- 專業(yè)的手機(jī)軟件開(kāi)發(fā)工作室
          3G視線 -- 專注手機(jī)軟件開(kāi)發(fā)
          posted on 2007-04-13 12:45 3G工作室 閱讀(1017) 評(píng)論(0)  編輯  收藏 所屬分類: j2me
          主站蜘蛛池模板: 汪清县| 鸡泽县| 永德县| 株洲市| 普定县| 富平县| 绥芬河市| 昭觉县| 宝丰县| 邮箱| 张掖市| 荆门市| 乌审旗| 崇左市| 临颍县| 沙河市| 崇阳县| 育儿| 甘洛县| 沙湾县| 利辛县| 阿克陶县| 嘉义市| 扎鲁特旗| 湘潭市| 宁陕县| 安达市| 太谷县| 汪清县| 根河市| 河津市| 灵台县| 彭阳县| 凉山| 哈巴河县| 若羌县| 大埔县| 甘南县| 凌海市| 肃北| 北碚区|