android自定义发彩信实现(不调用系统发彩信界面)
最近几天,因为项目需要,发彩信界面不再是调用系统的界面,即不跳转到短信界面,这个功能起初感觉应该很简单,但是真正做起来后,发现其实没有想象中那么简单,刚做完项目,趁头脑清晰,先把代码写下来先:
这几天为了这个项目,网上找了不少资料,大都资料都差不多,对于如何不跳用系统界面发彩信都有讲解,但是这个的前提是apn必须是wap,当如果是net时,因为连接超时而无法发送,正以内发彩信必须通过wap接入点才能发送,即使是在系统界面发彩信时,如果接入点不是wap,则会自动切换过来,待发送完后再切换回去,所以这个模块的核心,其实就是,如何在调用发彩信时,切换apn至wap,待发送完毕后再切换回去。。。
首先,根据不同移动供应商,需要设置不同的url和proxy
[java] // 电信彩信中心url,代理,端口
public static String mmscUrl_ct = "http://mmsc.vnet.mobi";
public static String mmsProxy_ct = "10.0.0.200";
// 移动彩信中心url,代理,端口
public static String mmscUrl_cm = "http://mmsc.monternet.com";
public static String mmsProxy_cm = "010.000.000.172";
// 联通彩信中心url,代理,端口
public static String mmscUrl_uni = "http://mmsc.vnet.mobi";
public static String mmsProxy_uni = "10.0.0.172";
// 电信彩信中心url,代理,端口
public static String mmscUrl_ct = "http://mmsc.vnet.mobi";
public static String mmsProxy_ct = "10.0.0.200";
// 移动彩信中心url,代理,端口
public static String mmscUrl_cm = "http://mmsc.monternet.com";
public static String mmsProxy_cm = "010.000.000.172";
// 联通彩信中心url,代理,端口
public static String mmscUrl_uni = "http://mmsc.vnet.mobi";
public static String mmsProxy_uni = "10.0.0.172";
方法实现如下:
[java] private static List<String> getSimMNC(Context context){
TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = telManager.getSubscriberId();
if(imsi!=null){
ArrayList<String> list = new ArrayList<String>();
if(imsi.startsWith("46000") ||imsi.startsWith("46002")){
//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
//中国移动
list.add(mmscUrl_cm);
list.add(mmsProxy_cm);
}else if(imsi.startsWith("46001")){
//中国联通
list.add(mmscUrl_uni);
list.add(mmsProxy_uni);
}else if(imsi.startsWith("46003")){
//中国电信
list.add(mmscUrl_ct);
list.add(mmsProxy_ct);
}
shouldChangeApn(context);
return list;
}
return null;
}
private static List<String> getSimMNC(Context context){
TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = telManager.getSubscriberId();
if(imsi!=null){
ArrayList<String> list = new ArrayList<String>();
if(imsi.startsWith("46000") ||imsi.startsWith("46002")){
//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
//中国移动
list.add(mmscUrl_cm);
list.add(mmsProxy_cm);
}else if(imsi.startsWith("46001")){
//中国联通
list.add(mmscUrl_uni);
list.add(mmsProxy_uni);
}else if(imsi.startsWith("46003")){
//中国电信
list.add(mmscUrl_ct);
list.add(mmsProxy_ct);
}
shouldChangeApn(context);
return list;
}
return null;
}
当当前的apn接入点不是发彩信所需要的wap时,就需要切换:
[java] private static boolean shouldChangeApn(final Context context){
final String wapId = getWapApnId(context);
String apnId = getApn(context);
//若当前apn不是wap,则切换至wap
if(!wapId.equals(apnId)){
APN_NET_ID = apnId;
setApn(context,wapId);
//切换apn需要一定时间,先让等待2秒
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
}
return false;
}
private static boolean shouldChangeApn(final Context context){
final String wapId = getWapApnId(context);
String apnId = getApn(context);
//若当前apn不是wap,则切换至wap
if(!wapId.equals(apnId)){
APN_NET_I
补充:移动开发 , Android ,