我正在尝试从Android发送短信到J2ME应用程序。
我遇到的问题是J2ME应用程序在特定端口上侦听传入的SMS消息,而我无法让我的Android应用程序向端口发送文本SMS。
我尝试过sendDataMessage,允许指定端口,但J2ME应用程序不接收它。另外,我尝试将// wma:port_number添加到邮件正文(我已经读过它here),将目标号码设置为phone_number:port形式,但都没有成功。
另外,由于我没有源代码,因此无法更改J2ME应用程序。
关于如何将Android应用程序中的短信发送到特定端口上的J2ME应用程序的任何想法?
答案 0 :(得分:0)
因为我有同样的问题已经有一段时间了,所以希望有人比我更有用。 (那样就好了)。但这是我在看到它时学到的东西:
JavaME和Android(关于SMS发送)之间的区别在于Android允许您在标准端口上捕获传入的SMS,而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) {
}
}
这是我当时能找到的唯一解决方案。如果有人有更好的,我也想知道。 : - )