短信猫向javame程序发送短信
javame收发短信,必须带端口号。
通过手机发送的短信一般都不带端口号。使用短信猫,可以发送带端口号的短信,如果不指定端口,则是-1。
短信猫发送短信,可参见使用smslib收发短信。并在此基础上增加:
msg.setSrcPort(1234);
msg.setDstPort(1234);
发送短信前需要设置端口号,这两个缺一不可。
其实主要在javame这边。
如果是javame程序正在运行,那么可以通过类似方式:
public void run() {
try {
this.connection = (MessageConnection) Connector.open("sms://:" + this.port);
while (!stop) {
try {
Message message = this.connection.receive();
在一个新线程里同步接收短信。
那么,如果程序并没有启动,是否可以通过短信激活javame程序读取它呢?答案是肯定的。
这需要手机支持MIDP2.0中的AMS。目前大部分手机均支持MIDP2.0了。
MIDlet代码:
protected void startApp() throws MIDletStateChangeException {
try {
displayMessage(getMessage());
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}private String getMessage() throws IOException {
MessageConnection connection = (MessageConnection) Connector
.open("sms://:1234");
TextMessage message = (TextMessage) connection.receive();
connection.close();
return message.getAddress() + "-" + message.getPayloadText();
}private void displayMessage(String message) {
display = Display.getDisplay(this);
TextBox t = new TextBox("演示应用", message, 256, 0);
display.setCurrent(t);
}
设置AMS,需要在Application Descriptor中加入:
MIDlet-Push-1: sms://:1234,proto.ReceiveSms,*
表示当1234端口短信来到时,调用proto.ReceiveSms,也就是上面代码的那个MIDlet。
以上代码,在:
- nokia 6120ci (s60)
- sony ericsson W715
- nokia 3110c (s40)
测试运行正常。
这篇文章上的评论的 RSS feed TrackBack URI