当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,