2012-10-18 99 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) { 
    } 
} 

這是我能找到當時的唯一解決方案。如果有人有更好的,我也想知道。 :-)

相關問題