⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smsservice.java

📁 应用SUN的串口通信包和AT命令
💻 JAVA
📖 第 1 页 / 共 4 页
字号:

		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 + -