短信猫向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)

测试运行正常。

PDF下載    发送文章为PDF   

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply