2012-10-18 72 views
2

我试图从Android发送短信到J2ME应用程序。如何从Android应用程序发送短信到J2ME?

我遇到的问题是J2ME应用程序在传入SMS消息的特定端口上侦听,并且我无法让我的Android应用程序将文本SMS发送到端口。

我试过sendDataMessage,它允许指定一个端口,但J2ME应用程序不会收到它。另外,我尝试在消息正文中添加// wma:port_number(我读过它here),将目标号码设置为phone_number:port形式,都没有成功。

此外,我无法更改J2ME应用程序,因为我没有它的源代码。

任何有关如何将Android应用程序的SMS发送到特定端口上的J2ME应用程序的想法?

回答

0

因为我有同样的问题,所以有一段时间,所以希望有人比我有更多有用的回复。 (那样就好了)。但是,当我看到它时,我学到了这些:

JavaME和Android之间的区别(关于短信发送)是Android可以让您在标准端口上捕获传入的短信,而JavaME强制您使用任何其他端口。

来自Android的与sendTextMessage()一起发送的消息在JavaME平台上被标识为TextMessage的实例。但是由于您无法在Android上指定端口,因此它会在标准端口上发送,而JavaME无法接收。

所以你现在看看sendDataMessage(),因为它可以让你指定一个端口号。问题是:从Android发送的sendDataMessage()消息在JavaME平台上被标识为BinaryMessage的实例。因此,侦听TextMessage的JavaME代码将永远不会触发,因为它正在接收BinaryMessage

我能找到的唯一解决方案就是为接收BinaryMessage时添加一些代码。对传入消息进行解码的方式稍有不同,但是在其他方面做同样的事情。

可悲的是,因为你写的,你没有的JavaME源,你不能做到这一点,但这里是它如何能期待:

String receivedSMS; 

public void notifyIncomingMessage(MessageConnection conn) { 
    try { 
     Message msg = conn.receive(); 
     if (msg instanceof TextMessage) { // Message sent from J2ME device 
      TextMessage tmsg = (TextMessage) msg; 
      receivedSMS = tmsg.getPayloadText(); 
     } else if (msg instanceof BinaryMessage) { // Message sent from Android device 
      BinaryMessage bmsg = (BinaryMessage)msg; 
      byte[] ta = bmsg.getPayloadData(); 
      receivedSMS = new String(ta); 
     } 
    } catch (Exception e) { 
    } 
} 

这是我能找到当时的唯一解决方案。如果有人有更好的,我也想知道。 :-)

相关问题