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

          3G 手機開發網

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

          一。前言
          學習 Java™ Micro Edition(Java ME)無線消息 API。這個專欄將從幾個簡單的代碼示例開始,隨后討論它為企業開發人員帶來的各種機會。
          <!--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-->

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

          在 MMS 剛出現時,有些專家預言它會取代 SMS,如果它的價格不是這么高的話,這個預言確實有可能會成為現實。即便如此,這種能在手機之間傳遞多媒體內容的功能還是漸受青睞。最近手機電子郵件的 成功,意味著未來手機消息傳遞的主要形式可能是電子郵件,但是要到那一步還有很長的一段路要走。

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

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

          這里介紹下jsr-102規范是針對WMA1.1的。 比較詳細的資料可以google下。jsr205規范完全向下兼容,也就是說。你在jsr-102寫的程序可以不用任何修改就可以運行在jsr-205規范下。

          消息內容

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

          小區廣播可能是最不為人所知的消息類型。小區廣播服務是一種數據服務,在這種服務中,消息由基站廣播,由偵聽這個基站的每個移動站接收。這個服務是單向的,這意味著 WMA 只能用來接收這類消息。

          發送和接收

          發送文本消息很簡單。步驟如下:

          • 設置手機號碼(地址)。
          • Connector 接口創建 MessageConnection
          • 創建新消息,并把它的類型轉換成 TextMessage
          • 設置凈荷。
          • 通過調用 send() 方法并向方法傳遞 Message 實例,發送消息。

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

           

          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. }   

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


           

          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. }   

          發送二進制消息與發送文本消息很相似。首先需要把數據放在字節數組中,然后創建 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 消息的傳遞可以分成:服務器到手機、手機到服務器和手機到手機。

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

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

          整理成一個工具類
          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("手機號碼不能為空!");  
          31.         }  
          32.         try{  
          33.             Integer.parseInt(phone);  
          34.         }catch(NumberFormatException n){  
          35.             throw new PhoneNumberException("手機號碼必須為數據!");  
          36.         }  
          37.     }  

          這篇文章會持續更新中,請關注

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




          爬蟲工作室 -- 專業的手機軟件開發工作室
          3G視線 -- 專注手機軟件開發
          posted on 2007-04-13 12:45 3G工作室 閱讀(1017) 評論(0)  編輯  收藏 所屬分類: j2me
          主站蜘蛛池模板: 康定县| 芦溪县| 丰镇市| 永春县| 察雅县| 包头市| 蒙城县| 汉源县| 随州市| 南充市| 长沙市| 咸宁市| 忻城县| 诸城市| 黄浦区| 临漳县| 吴忠市| 谷城县| 阜宁县| 弥渡县| 嵊泗县| 富宁县| 黑河市| 凤冈县| 西城区| 连云港市| 来宾市| 准格尔旗| 淮滨县| 祥云县| 城固县| 柞水县| 罗城| 长武县| 错那县| 临湘市| 微山县| 宝丰县| 徐水县| 名山县| 二连浩特市|