CDMA短信modem开发总结

阅读更多
转载请注明原文地址:http://sailingsky.iteye.com/blog/1816579

本文并不是完整的从头到尾介绍怎么用java通过短信modem发送短信,只是侧重讲解决短信modem中文发送短信的问题。
    首先,由于短信modem型号的不同,你所采用的AT命令的格式以及解决中文短信乱码的方案也不同。
    1.Anydata 即西门子的短信modem      
    
                //AT+CMGF=1命令将设置短信格式设置为text 
                tmp = "AT+CMGF=1\r\n";
                //writeContent方法就是将命令或内容通过串口写入短信modem的方法 
                if (writeContent(tmp, rt) != 1) {
                     return -1;
                 }
                 // “AT+CMGS=msgid,number,callback-number,option,data”
                 //Msgid是用户指定的消息代号
                 //Number是短消息的目的地号码
                 //Callback-number是用户填写的回叫号码
                 //Option: 这个参数是几个选项的组合
                 //bit 0-1:coding
                 //0: ascii,原文;
                 //1: ascii, HEX格式化
                 //3: Unicode, HEX格式化;
                 //2: OCTET,HEX格式化
                 tmp = "AT+CMGS=2,"+mobile+",,3,"+stringToUnicode(message)+"\r\n";
                 if (writeContent(tmp, rt) == 1) {
                     return 0;
                 }

        中文肯定是先用转换成unicode码字符串才能发送,不然会是乱码
      
          /*
     * 将字符串转化为unicode码字符串
     */
    public  String stringToUnicode(String s) {
		String str = "";
		for (int i = 0; i < s.length(); i++) {
			int ch = (int) s.charAt(i);
			if (ch > 255)
				str += Integer.toHexString(ch) ;
			else
				str +="00" + Integer.toHexString(ch);
		}
		return str;
	}
     


   2.wavecom 短信modem

    
      //AT+CMGF=1同样是将短信模式设置为text模式
      tmp = "AT+CMGF=1\r\n";
                 if (writeContent(tmp, rt) != 1) {
                     return -1;
                 }
                
//Command syntax: AT+CMGS= [,] [,] [,] [,]
//[,]  []
                 tmp = "AT+CMGS=\"" +mobile+"\","+message.getBytes("UNICODE").length+"\r";
               //这是先写命令的前半部分
                 writeContent(tmp, rt);
                 //这是写后半部分,也就是写短信内容  
                 if(writeCNContent(message,rt,(char)-1)==1){
                	 return 0;
                 };  
     


    
      /**
        *写中文短信内容
       **/  
       public int writeCNContent(String content, Rxtx rt, char last) {

        try {
            //将短信内容转码成unicode的byte数组
            byte[]  b =  content.getBytes("UNICODE");
            char[] carr = new char[170]; 

            rt.writeData(b, 0, b.length);
            Thread.sleep(500);
            //b2是ctrl+z命令的byte数组形式
            byte[] b2 = new byte[] { 0x00, 0x1a }; 
            rt.writeData(b2, 0, b2.length);
            int ret = rt.read(carr, 170, 2000);
            if (ret == 0) {
                debug.error(" command read failed");

                rt.closeConnection();
                return 0;
            }
            //解析从短信modem返回回来的结果信息
            String t = parseByte(carr);
            if ((!(t.indexOf("OK") > -1)) && (!(t.indexOf(">") > -1))) { 
            }
            
        } catch (Exception ce) {
            ce.printStackTrace();
            return 0;
        }
        return 1;

    }
     

你可能感兴趣的:(java,电信,CDMA,modem,中文)