📄 smsservice.java
字号:
whatToDiscard =
"+"
+ SMSUtils.substituteSymbol(
SMSUtils.substituteSymbol(
SMSATCommands.AT_SOFTWARE,
"AT+",
""),
"\r",
"")
+ ": ";
serialDriver.send(SMSATCommands.AT_SOFTWARE);
response = serialDriver.getResponse();
if (response.length() == 0)
response = "";
else if (response.indexOf(SMSATCommands.AT_OK) > -1) {
response =
SMSUtils.substituteSymbol(response, SMSATCommands.AT_OK, "");
response = SMSUtils.substituteSymbol(response, "\r", "");
response = SMSUtils.substituteSymbol(response, "\n", "");
response = SMSUtils.substituteSymbol(response, whatToDiscard, "");
response = SMSUtils.substituteSymbol(response, "\"", "");
} else
response = DEFAULT_VALUE_NOT_REPORTED;
return response;
}
private int getBatteryLevel() throws Exception {
String response, level;
StringTokenizer tokens;
String whatToDiscard;
whatToDiscard =
"+"
+ SMSUtils.substituteSymbol(
SMSUtils.substituteSymbol(
SMSATCommands.AT_BATTERY,
"AT+",
""),
"\r",
"")
+ ": ";
serialDriver.send(SMSATCommands.AT_BATTERY);
response = serialDriver.getResponse();
if (response.length() == 0)
level = "0";
else if (response.indexOf(SMSATCommands.AT_OK) > -1) {
response =
SMSUtils.substituteSymbol(response, SMSATCommands.AT_OK, "");
response = SMSUtils.substituteSymbol(response, "\r", "");
response = SMSUtils.substituteSymbol(response, "\n", "");
response = SMSUtils.substituteSymbol(response, whatToDiscard, "");
tokens = new StringTokenizer(response, ":,");
tokens.nextToken();
level = tokens.nextToken().trim();
} else
level = "0";
return (Integer.parseInt(level));
}
private int getSignalLevel() throws Exception {
String response, level;
StringTokenizer tokens;
String whatToDiscard;
whatToDiscard =
"+"
+ SMSUtils.substituteSymbol(
SMSUtils.substituteSymbol(
SMSATCommands.AT_SIGNAL,
"AT+",
""),
"\r",
"")
+ ": ";
serialDriver.send(SMSATCommands.AT_SIGNAL);
response = serialDriver.getResponse();
if (response.length() == 0)
level = "0";
else if (response.indexOf(SMSATCommands.AT_OK) > -1) {
response =
SMSUtils.substituteSymbol(response, SMSATCommands.AT_OK, "");
response = SMSUtils.substituteSymbol(response, "\r", "");
response = SMSUtils.substituteSymbol(response, "\n", "");
response = SMSUtils.substituteSymbol(response, whatToDiscard, "");
tokens = new StringTokenizer(response, ":,");
level = tokens.nextToken().trim();
} else
level = "0";
return (Integer.parseInt(level) * 100 / 31);
}
private LinkedList splitLargeMessages(LinkedList messageList) {
LinkedList outList;
OutgoingMessage message, newMessage;
int i, splitIndex, messageLength, smsSplitId, smsDispatchId;
int maxMessageLength, partLength;
String splitText;
outList = new LinkedList();
for (i = 0; i < messageList.size(); i++) {
message = (OutgoingMessage) messageList.get(i);
switch (message.getMessageEncoding()) {
case SMSMessage.MESSAGE_ENCODING_7BIT :
maxMessageLength = MAX_SMS_LEN_7BIT;
break;
case SMSMessage.MESSAGE_ENCODING_8BIT :
maxMessageLength = MAX_SMS_LEN_8BIT;
break;
case SMSMessage.MESSAGE_ENCODING_UNICODE :
maxMessageLength = MAX_SMS_LEN_UNICODE;
break;
default :
maxMessageLength = 0;
break;
}
messageLength = message.getText().length();
if (messageLength > maxMessageLength) {
partLength = maxMessageLength - SMS_SPLIT_SIGNATURE.length();
smsSplitId = getSmsSplitId();
splitIndex = 0;
while ((splitIndex * partLength) < messageLength) {
int from = splitIndex * partLength;
int to = from + partLength;
if (to > messageLength)
to = messageLength;
splitText = message.getText().substring(from, to);
smsDispatchId = smsSplitId + splitIndex;
splitText =
SMS_SPLIT_SIGNATURE.substring(0, 1)
+ (char) smsDispatchId
+ SMS_SPLIT_SIGNATURE.substring(2, 3)
+ splitText;
newMessage =
new OutgoingMessage(message.getRecipient(), splitText);
newMessage.setMessageEncoding(message.getMessageEncoding());
outList.add(newMessage);
splitIndex++;
}
} else
outList.add(message);
}
return outList;
}
private int getSmsSplitId() {
int id;
id = smsSplitId;
smsSplitId++;
if (smsSplitId > 15)
smsSplitId = 0;
return id << 3;
}
public int waitMessages(LinkedList messageList) {
int i, j, memIndex;
String response, line, sms, temp, originator, text, pdu;
String day, month, year, hour, min, sec;
BufferedReader reader;
Date sentDate;
Calendar cal = Calendar.getInstance();
synchronized (_SYNC_) {
if (getConnected()) {
switch (operationMode) {
case MODE_ASCII :
try {
serialDriver.send(SMSATCommands.AT_CMD_MODE);
messageList.clear();
serialDriver.send(SMSATCommands.AT_ASCII_MODE);
response = serialDriver.getResponse();
serialDriver.send(SMSATCommands.AT_CHARSET_HEX);
response = serialDriver.getResponse();
String signal = "";
int index = 0;
while (true) {
signal = serialDriver.waitResponse();
if (!signal.equals("")) {
if (signal.indexOf("+CMT") > -1) {
int begin = signal.indexOf(",") + 1;
int end = signal.length();
index =
Integer.parseInt(
signal.substring(begin, end));
if (index > 0) {
try {
serialDriver.send(
SMSUtils.substituteSymbol(
SMSATCommands
.AT_READ_MESSAGE,
"{1}",
"" + index));
response =
serialDriver.getResponse();
} catch (Exception e) {
e.printStackTrace();
return ERR_GENERIC_ERROR;
}
} else
return ERR_GENERIC_ERROR;
break;
}
}
}
sms = "";
reader =
new BufferedReader(new StringReader(response));
line = reader.readLine();
while ((line != null)
&& (!line.equalsIgnoreCase("OK"))) {
if (line.indexOf("+CMGR") == 0)
sms = line;
else if (
(line.indexOf("+CMGR") == -1)
&& (line.length() > 0))
sms = sms + "~" + line;
else
sms = sms + "~" + "00";
if ((sms.indexOf("\"REC READ\"") >= 0)
|| (sms.indexOf("\"REC UNREAD\"") >= 0)) {
if (sms.indexOf("~") != -1) {
i = 6;
temp = "";
while (sms.charAt(i) != ',') {
temp += sms.charAt(i);
i++;
}
memIndex =
Integer.parseInt(temp.trim());
i = sms.indexOf('"') + 1;
i = sms.indexOf('"', i) + 1;
i = sms.indexOf('"', i) + 1;
temp = "";
while (sms.charAt(i) != '"') {
temp += sms.charAt(i);
i++;
}
originator = temp;
i++;
i = sms.indexOf('"', i) + 1;
day = sms.substring(i + 6, i + 6 + 2);
month = sms.substring(i + 3, i + 3 + 2);
year = sms.substring(i, i + 2);
year = "20" + year;
hour = sms.substring(i + 9, i + 9 + 2);
min = sms.substring(i + 12, i + 12 + 2);
sec = sms.substring(i + 15, i + 15 + 2);
cal.set(
Integer.parseInt(year),
Integer.parseInt(month) - 1,
Integer.parseInt(day),
Integer.parseInt(hour),
Integer.parseInt(min),
Integer.parseInt(sec));
sentDate = cal.getTime();
i = sms.indexOf('~') + 1;
text = sms.substring(i);
if (text.equalsIgnoreCase("00"))
messageList.add(
new IncomingMessage(
sentDate,
originator,
"",
index));
else
messageList.add(
new IncomingMessage(
sentDate,
originator,
SMSGSMAlphabets.hex2Text(
text,
SMSGSMAlphabets
.GSM7BITDEFAULT),
index));
deviceInfo.getStatistics().incTotalIn();
sms = "";
}
} else if (sms.indexOf("\"STO SENT\"") >= 0);
else if (sms.indexOf("\"STO UNSENT\"") >= 0);
line = reader.readLine();
}
reader.close();
return ERR_OK;
} catch (Exception e) {
e.printStackTrace();
return ERR_GENERIC_ERROR;
}
case MODE_PDU :
try {
String signal = "";
int index=0;
while (true) {
signal = serialDriver.waitResponse();
if (!signal.equals("")) {
if (signal.indexOf("+CMT") > -1) {
int begin = signal.indexOf(",") + 1;
int end = signal.length() - 1;
index =
Integer.parseInt(
signal.substring(begin, end));
if (index > 0) {
try {
serialDriver.send(
SMSUtils.substituteSymbol(
SMSATCommands
.AT_READ_MESSAGE,
"{1}",
"" + index));
response =
serialDriver.getResponse();
sms = "";
reader =
new BufferedReader(
new StringReader(response));
line = reader.readLine().trim();
while ((line != null)
&& (line.length() > 0)
&& (!line
.equalsIgnoreCase("OK"))
&& (!line
.equalsIgnoreCase("ERROR"))) {
// i = line.indexOf(':');
// j = line.indexOf(',');
// memIndex =
// Integer.parseInt(
// line
// .substring(
// i + 1,
// j)
// .trim());
memIndex=index;
pdu = reader.readLine();
if (
isIncomingMessage(pdu)) {
messageList.add(
new IncomingMessage(
pdu,
memIndex));
deviceInfo
.getStatistics()
.incTotalIn();
} else if (
isStatusReportMessage(pdu)) {
messageList.add(
new StatusReportMessage(
pdu,
memIndex));
deviceInfo
.getStatistics()
.incTotalIn();
}
line =
reader
.readLine()
.trim();
}
reader.close();
return ERR_OK;
} catch (Exception e) {
e.printStackTrace();
return ERR_GENERIC_ERROR;
}
} else
return ERR_GENERIC_ERROR;
} else {
continue;
}
}
return ERR_GENERIC_ERROR;
}
} catch (Exception e) {
e.printStackTrace();
return ERR_GENERIC_ERROR;
}
default :
return ERR_GENERIC_ERROR;
}
} else
return ERR_NOT_CONNECTED;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -