`
王树雄
  • 浏览: 239521 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用J2ME技术获得手机的运营商类型

    博客分类:
  • 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技术通用支持,而且需要了解手机号段的信息,而不是很实用。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics