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

📄 cservice.java

📁 开源的手机短信开发包!包括例子程序和比较详细的文档
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
							response = serialDriver.getResponse();
							error = ERR_OK;
							for (i = 0; i < outList.size(); i ++)
							{
								message = (COutgoingMessage) outList.get(i);
								serialDriver.send(CUtils.substituteSymbol(CATCommands.AT_SEND_MESSAGE, "{1}", message.getRecipient()));
								while (serialDriver.dataAvailable()) serialDriver.skipBytes(1);
								serialDriver.send(message.getHexText());
								serialDriver.send((char) 26);
								response = serialDriver.getResponse();
								if (response.indexOf(CATCommands.AT_OK) > -1)
								{
									message.setDispatchDate(new Date());
									deviceInfo.getStatistics().incTotalOut();
								}
								else
								{
									message.setDispatchDate(null);
									error = ERR_SEND_FAILED;
								}
							}
							return error;
						}
						catch (Exception e)
						{
							e.printStackTrace();
							setConnected(false);
							return ERR_NOT_CONNECTED;
						}
					case MODE_PDU:
						try
						{
							serialDriver.send(CATCommands.AT_PDU_MODE);
							response = serialDriver.getResponse();
							serialDriver.send(CATCommands.AT_KEEP_LINK_OPEN);
							response = serialDriver.getResponse();
							error = ERR_OK;
							for (i = 0; i < outList.size(); i ++)
							{
								message = (COutgoingMessage) outList.get(i);
								pdu = message.getPDU(smscNumber);
								j = pdu.length();
								j /= 2;
								if (smscNumber == null) ;
								else if (smscNumber.length() == 0) j --;
								else
								{
									j -= ((smscNumber.length() - 1) / 2);
									j -= 2;
								}
								serialDriver.send(CUtils.substituteSymbol(CATCommands.AT_SEND_MESSAGE, "\"{1}\"", "" + j));
								while (!serialDriver.dataAvailable()) { try { Thread.sleep(10); } catch (Exception e) {} };
								while (serialDriver.dataAvailable()) serialDriver.skipBytes(1);
								serialDriver.send(pdu);
								serialDriver.send((char) 26);
								response = serialDriver.getResponse();
								if (response.indexOf(CATCommands.AT_OK) > -1)
								{
									message.setDispatchDate(new Date());
									deviceInfo.getStatistics().incTotalOut();
								}
								else
								{
									message.setDispatchDate(null);
									error = ERR_SEND_FAILED;
								}
							}
							return error;
						}
						catch (Exception e)
						{
							e.printStackTrace();
							setConnected(false);
							return ERR_NOT_CONNECTED;
						}
					default:
						return ERR_SEND_FAILED;
				}
			}
			else return ERR_NOT_CONNECTED;
		}
	}

	/**
		Deletes an SMS message from the GSM device memory.
		<br><br>
		<strong>Notes:</strong>
		<ul>
			<li>A deleted message cannot be recovered.</li>
		</ul>

		@param	message	a valid CIncomingMessage object, i.e. an object which is
				previously read with readMessages() from the GSM device.
		@return  One of ERR_* values.
		@see	CIncomingMessage
		@see	CService#deleteMessage(int)
	*/
	public int deleteMessage(CIncomingMessage message)
	{
		synchronized (_SYNC_)
		{
			return deleteMessage(message.getMemIndex());
		}
	}

	/**
		Deletes an SMS message from the GSM device memory.
		<br><br>
		<strong>Notes:</strong>
		<ul>
			<li>A deleted message cannot be recovered.</li>
			<li>It is highly recommended to use the other form of the deleteMessage()
				method.</li>
		</ul>

		@param	memIndex	the memory index of the GSM device's memory from where
				the message (if there is any message there) should be deleted.
		@return  One of ERR_* values.
		@see	CService#deleteMessage(CIncomingMessage)
	*/
	public int deleteMessage(int memIndex)
	{
		String response;

		synchronized (_SYNC_)
		{
			if (getConnected())
			{
				if (memIndex > 0)
				{
					try
					{
						serialDriver.send(CUtils.substituteSymbol(CATCommands.AT_DELETE_MESSAGE, "{1}", "" + memIndex));
						response = serialDriver.getResponse();
						if (response.indexOf(CATCommands.AT_OK) > -1) return ERR_OK;
						else return ERR_MESSAGE_NOT_FOUND;
					}
					catch (Exception e)
					{
						e.printStackTrace();
						return ERR_GENERIC_ERROR;
					}
				}
				else return ERR_GENERIC_ERROR;
			}
			else return ERR_NOT_CONNECTED;
		}
	}

	/**
		Virtual method, called upon receipt of a message (Asynchronous mode only!)
		<br><br>
		<strong>Notes:</strong>
		<ul>
			<li>If you plan to use jSMSEngine API in asynchronous mode, you should
				override this method, making it do your job upon message receipt.</li>
		</ul>

		@param	message the received message.
		@return  return true if you wish the message to be deleted from the GSM device's memory.
					Otherwise false.
		@see	CService#setReceiveMode(int)
	*/
	public boolean received(CIncomingMessage message)
	{
		return false;
	}

	/**
		* Checks if the message is SMS-DELIVER.
		*
		* @author George Karadimas
		* @param pdu the message pdu
		* @return true if the message is SMS-DELIVER
	*/
	private boolean isIncomingMessage(String pdu)
	{
		int index, i;

		i = Integer.parseInt(pdu.substring(0, 2), 16);
		index = (i + 1) * 2;

		i = Integer.parseInt(pdu.substring(index, index + 2), 16);
		if ((i & 0x03) == 0) return true;
		else return false;
	}

	/**
		* Checks if the message is SMS-STATUS-REPORT.
		*
		* @param pdu the message pdu
		* @return true if the message is SMS-STATUS-REPORT
	*/
	private boolean isStatusReportMessage(String pdu)
	{
		String str;
		int index, i;

		str = pdu.substring(0, 2);
		i = Integer.parseInt(str, 16);
		index = (i + 1) * 2;

		str = pdu.substring(index, index + 2);
		i = Integer.parseInt(str, 16);
		if ((i & 0x02) == 2) return true;
		else return false;
	}

	private void setConnected(boolean connected) { this.connected = connected; }
	private void setInitialized(boolean initialized) { this.initialized = initialized; }

	private String getManufacturer() throws Exception
	{
		String response;
		String whatToDiscard;

		whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_MANUFACTURER, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_MANUFACTURER);
		response = serialDriver.getResponse();
		if (response.length() == 0) response = "";
		else if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.substituteSymbol(response, whatToDiscard, "");
			response = CUtils.substituteSymbol(response, "\"", "");
		}
		else response = DEFAULT_VALUE_NOT_REPORTED;
		return response;
	}

	private String getModel() throws Exception
	{
		String response;
		String whatToDiscard;

		whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_MODEL, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_MODEL);
		response = serialDriver.getResponse();
		if (response.length() == 0) response = "";
		else	if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.substituteSymbol(response, whatToDiscard, "");
			response = CUtils.substituteSymbol(response, "\"", "");
		}
		else response = DEFAULT_VALUE_NOT_REPORTED;
		return response;
	}

	private String getSerialNo() throws Exception
	{
		String response;
		String whatToDiscard;

		whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_SERIALNO, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_SERIALNO);
		response = serialDriver.getResponse();
		if (response.length() == 0) response = "";
		else 	if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.substituteSymbol(response, whatToDiscard, "");
		}
		else response = DEFAULT_VALUE_NOT_REPORTED;
		return response;
	}

	private String getImsi() throws Exception
	{
		String response;
		String whatToDiscard;

		whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_IMSI, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_IMSI);
		response = serialDriver.getResponse();
		if (response.length() == 0) response = "";
		else 	if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.substituteSymbol(response, whatToDiscard, "");
		}
		else response = DEFAULT_VALUE_NOT_REPORTED;
		return response;
	}

	private String getSwVersion() throws Exception
	{
		String response;
		String whatToDiscard;

		whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_SOFTWARE, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_SOFTWARE);
		response = serialDriver.getResponse();
		if (response.length() == 0) response = "";
		else if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.substituteSymbol(response, whatToDiscard, "");
			response = CUtils.substituteSymbol(response, "\"", "");
		}
		else response = DEFAULT_VALUE_NOT_REPORTED;
		return response;
	}

	private int getBatteryLevel() throws Exception
	{
		String response, level;
		StringTokenizer tokens;
		String whatToDiscard;

		whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_BATTERY, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_BATTERY);
		response = serialDriver.getResponse();
		if (response.length() == 0) level = "0";
		else if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.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 = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_SIGNAL, "AT+", ""), "\r", "") + ": ";
		serialDriver.send(CATCommands.AT_SIGNAL);
		response = serialDriver.getResponse();
		if (response.length() == 0) level = "0";
		else 	if (response.indexOf(CATCommands.AT_OK) > -1)
		{
			response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
			response = CUtils.substituteSymbol(response, "\r", "");
			response = CUtils.substituteSymbol(response, "\n", "");
			response = CUtils.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;
		COutgoingMessage message, newMessage;
		int i, splitIndex, messageLength, smsSplitId, smsDispatchId;
		int maxMessageLength, partLength;
		String splitText;

		outList = new LinkedList();
		for (i = 0; i < messageList.size(); i ++)
		{
			message = (COutgoingMessage) messageList.get(i);
			switch (message.getMessageEncoding())
			{
				case CMessage.MESSAGE_ENCODING_7BIT:
					maxMessageLength = MAX_SMS_LEN_7BIT;
					break;
				case CMessage.MESSAGE_ENCODING_8BIT:
					maxMessageLength = MAX_SMS_LEN_8BIT;
					break;
				case CMessage.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 COutgoingMessage(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;
	}

	private class CReceiveThread extends Thread
	{
		public void run()
		{
			LinkedList messageList;

			messageList = new LinkedList();
			while (true)
			{
				try { sleep(10000); } catch (Exception e) {}
				synchronized (_SYNC_)
				{
					if ((getConnected()) && (getReceiveMode() == RECEIVE_MODE_ASYNC))
					{
						messageList.clear();
						readMessages(messageList, CIncomingMessage.CLASS_ALL);
						for (int i = 0; i < messageList.size(); i ++)
						{
							CIncomingMessage message = (CIncomingMessage) messageList.get(i);
							if (received(message)) deleteMessage(message);
						}
					}
				}
			}
		}
	}

	public static void main(String[] args)
	{
		System.out.println("jSMSEngine API.");
		System.out.println("	An open source Java API to process SMS messages from your computer.");
		System.out.println("	This software is distributed under the LGPL license.");
		System.out.println("");
		System.out.println("Written by Thanasis Delenikas.");
		System.out.println();
		System.out.println("Copyright (C) 2002-2005, Thanasis Delenikas, Athens / GREECE.");
		System.out.println("Please check http://www.jsmsengine.org for latest information.");
		System.out.println("\n");
		System.out.println(_name + " v" + _version + " { " + _reldate + " }");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -