|
接下来实现负责通过数据线和手机通信的类OperateMobile。这个类可以通过send方法控制手机发送短信。
public class OperateMobile
...{
private MySerial mySerial;
private static char symbol = 10;
private static char symbol1 = 13;
public static boolean open(int port) ...{
mySerial = new MySerial(port);
if (mySerial.Initialize() == 1) ...{
return true;
}
else ...{
return false;
}
}
// 设置短信发送模式
private static boolean setMode(int mode)
String strReturn, strSend = “”;
try ...{
// 模式字符串
strSend = "AT+CMGF=" + String.valueOf(mode) +
String.valueOf(symbol1);
// 将模式通过COM口写入手机
mySerial.WritePort(strSend);
strReturn = "";
// 从手机读出长度为6的返回信息,如果包含“OK”,则说明设置成功
strReturn = mySerial.ReadPort(6);
if (strReturn.indexOf("OK", 0) != -1) ...{
return true;
}
return false;
}
catch (Exception ex) ...{
return false;
}
}
public static boolean send (String phoneCode, String msg) ...{
String strReturn = “”, strSend = “”;
char symbol2 = 34;
char symbol3 = 26;
if (setMode(1) != true) ...{ // 设置短信发送模式
return false;
}
try ...{
strSend = "AT+CSMP=1,173,36,08" + String.valueOf(symbol1);
mySerial.writePort(strSend);
sleep(300);
strReturn = mySerial.ReadPort(6); // 读返回字符串
if (strReturn.indexOf("OK", 0) != -1) ...{ // 如果成功,进行下一步
// 将对方的电话号传入手机
strSend = "AT+CMGS=" + String.valueOf(symbol2) + phoneCode +
String.valueOf(symbol2) +
String.valueOf(symbol1);
mySerial.writePort(strSend);
strReturn = "";
sleep(200);
strReturn = mySerial.ReadPort(4);
byte[] str1 = null;
try ...{
str1 = msg.getBytes("GBK");
}
catch (Java.io.UnsupportedEncodingException e) ...{
e.printStackTrace();
}
// 将发送信息变成十六进制发送
strSend = encodeHex(str1, msg) + String.valueOf(symbol3) +
String.valueOf(symbol1);
mySerial.writePort(strSend);
sleep(200);
strReturn = mySerial.ReadPort(8); // 读信息以确定是否发送成功
if (strReturn.indexOf("+CMGS", 0) != -1) ...{
System.out.println("OK");
return true;
}
}
return false;
}
catch (Exception ex) ...{
ex.printStackTrace();
return false;
}
}
|
|