使用J2ME技術獲得手機的運營商型別

網路咖啡發表於2010-01-11

  使用J2ME技術獲得手機的運營商型別

作者:陳躍峰

出自:http://blog.csdn.net/mailbomb

 

      在手機軟體開發中,通過簡訊SP進行收費已經很普及了,而對於簡訊SP來說,一般簡訊的通道號碼(106開通的號碼)中,中國移動和中國聯通、中國電信的都不一樣,也就說如果使用簡訊SP的話,手機屬於的運營商不同,則需要傳送不同的內容到不同的通道號碼,這樣就使手機軟體在扣費時必須處理這個問題。

      一般解決這個問題的思路有2種:

1、         出現選擇介面,讓使用者自己選擇

這種方式對於程式實現來說,是最為簡單的一種,但是在實現功能方面的弊端也是最大的。主要有2個問題:a、每次都彈出選擇介面不太友好,b、如果使用者選擇錯誤則無法扣費。

所以一般不使用這種方式進行處理。

2、         通過獲得簡訊服務中心號碼進行判斷

如果手機支援WMA則可以通過獲得屬性“wireless.messaging.sms.smsc”的值,來獲得簡訊服務中心號碼。對於國內的三個運營商來說,中國移動的簡訊服務中心號碼是13800XXX500,其中XXX為號碼所屬的地區電話區號,中國聯通的簡訊服務中心號碼比較亂,但是均以130開頭,包括3G的手機,而對於中國電信的手機,諮詢客服以後均告知不需要設定簡訊服務中心號碼。

基於以上的內容,則判斷手機所屬網路的方法程式碼如下:

      /**

       * 獲得手機網路類別

       */

      private int getPhoneNetworkType(){

           //獲得簡訊中心號碼

           String smsc = System.getProperty("wireless.messaging.sms.smsc");

           //判斷類別

           if(smsc != null){

                 //移動簡訊中心號碼

                 if(smsc.startsWith("138") || smsc.startsWith("+138") || smsc.startsWith("+86138")){

                      return MessageThread.CHINA_MOBILE_TYPE;

                 }else if(smsc.startsWith("+86130") || smsc.startsWith("0086130") || smsc.startsWith("130")|| smsc.startsWith("+130")){

                      return  MessageThread.CHINA_UNICOM_TYPE;

                 }

           }

           //預設為電信手機型別

           return  MessageThread.CHINA_TELECOM_TYPE;

      }

 

      其它通過獲得手機號碼來判斷手機所屬的網路,由於獲得手機號碼不被J2ME技術通用支援,而且需要了解手機號段的資訊,而不是很實用。

      如果大家有什麼好的意見和建議,可以發郵件和我一起交流:cqucyf@gmail.com

 

相關文章