在手机软件开发中,通过短信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技术通用支持,而且需要了解手机号段的信息,而不是很实用。