Sun WTK を使用して、SMS を送信し、必要に応じて受信する必要がある midlet を実行しています。WMA コンソールを使用して midlet にメッセージを送受信できますが、自分のアプリケーションを使用して同じことをしたいと考えています。
スニッフィングを行ったところ、メッセージが UDP によって WMA コンソールからエミュレータに送信されていることがわかりました。
Sun WTK を使用して、SMS を送信し、必要に応じて受信する必要がある midlet を実行しています。WMA コンソールを使用して midlet にメッセージを送受信できますが、自分のアプリケーションを使用して同じことをしたいと考えています。
スニッフィングを行ったところ、メッセージが UDP によって WMA コンソールからエミュレータに送信されていることがわかりました。
WTK の jar の中を掘り下げた後、SMS を送受信する方法を理解することができました。jarkvem.jar
をkenv.zip
アプリケーションのクラスパスに含める必要がありました。Linux でテスト済み。
public static void main(String[] args) throws IOException, PhoneNumberNotAvailableException, InterruptedException {
System.setProperty("kvem.home", "/home/jassuncao/usr/WTK2.5.2");
WMAClient wmaClient = WMAClientFactory.newWMAClient(null, 4);
wmaClient.connect();
wmaClient.setMessageListener(new MessageListener() {
@Override
public void notifyIncomingMessage(WMAClient wmaclient) {
try {
System.out.println("Message received:"+wmaclient.receive());
} catch (IOException e) {
e.printStackTrace();
}
}
});
System.out.println("This number "+wmaClient.getPhoneNumber());
String[] receivers = wmaClient.getKnownReceivers();
for (String receiver : receivers) {
System.out.println("Sending SMS to "+receiver);
Message msg = new Message("Hello world!!");
msg.setFromAddress("sms://"+wmaClient.getPhoneNumber());
msg.setToAddress("sms://"+receiver);
//It seems the ports must be set AFTER the address to work
msg.setToPort(50000);
msg.setFromPort(50000);
wmaClient.send(msg);
}
System.in.read();
wmaClient.unregisterFromServer();
}