任何人都可以帮我编写应用程序来发送和接收黑莓中的短信。如果你能提供一些代码片段。
答案 0 :(得分:13)
发送短信:
import net.rim.device.api.io.*;
import net.rim.device.api.system.*;
import javax.microedition.io.*;
import java.util.*;
import java.io.*;
public class SendSms extends Application
{
private static final int MAX_PHONE_NUMBER_LENGTH = 32;
private String addr = "15191112222";
private String msg = "This is a test message.";
private DatagramConnection _dc = null;
private static String _openString = "sms://";
public static void main(String[] args)
{
new SendSms().enterEventDispatcher();
}
public SendSms()
{
try {
_dc = (DatagramConnection)Connector.open(_openString);
byte[] data = msg.getBytes();
Datagram d = _dc.newDatagram(_dc.getMaximumLength());
d.setAddress("//" + addr);
_dc.send(d);
} catch ( IOException e) {}
System.exit(0);
}
}
接收短信:
import net.rim.device.api.io.*;
import net.rim.device.api.system.*;
import javax.microedition.io.*;
import java.util.*;
import java.io.*;
public class ReceiveSms extends Application {
private ListeningThread _listener;
public static void main(String[] args)
{
new ReceiveSms().enterEventDispatcher();
}
ReceiveSms() {
_listener = new ListeningThread();
_listener.start();
}
private class ListeningThread extends Thread
{
private boolean _stop = false;
private DatagramConnection _dc;
public synchronized void stop()
{
_stop = true;
try {
_dc.close();
} catch (IOException e) {
System.err.println(e.toString());
}
}
public void run()
{
try {
_dc = (DatagramConnection)Connector.open("sms://");
for(;;)
{
if ( _stop ) {
return;
}
Datagram d = _dc.newDatagram(_dc.getMaximumLength());
_dc.receive(d);
String address = new String(d.getData());
String msg = new String(d.getData());
System.out.println("Message received: " + msg);
System.out.println("From: " + address);
System.exit(0);
}
} catch (IOException e) {
System.err.println(e.toString());
}
}
}
}
答案 1 :(得分:3)
似乎从黑莓手机发送短信并不总是那么简单。我以为我已经弄明白了,但是当BlackBerry用户使用的是CDMA network as opposed to GSM时,它无效。
我找到了solution here并对其进行了调整。与该示例不同的还有端口号,我使用端口5016 as suggested on the Blackberry support forum和Blackberry knowledge center。
private static byte[] stringToByte(String s)
{
char[] sa = s.toCharArray();
byte[] ba = new byte[sa.length];
for (int i = 0; i < ba.length; i++) {
ba[i] = (byte) (sa[i] & 0xFF);
}
return ba;
}
private static void sendCDMAText(String nr, String message) throws IOException
{
DatagramConnection conn = (DatagramConnection) Connector.open("sms://+" + nr + ":5016");
byte[] bytes = stringToByte(message);
Datagram msg = conn.newDatagram(bytes, bytes.length);
conn.send(msg);
}
private static void sendSMS(String nr, String message) throws IOException
{
MessageConnection conn = (MessageConnection) Connector.open("sms://" + nr);
TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
msg.setPayloadText(message);
conn.send(msg);
}
public static void sendTextMessage(String nr, String message) throws IllegalArgumentException, InterruptedIOException, NullPointerException, SecurityException, IOException
{
if (RadioInfo.getNetworkType() == RadioInfo.NETWORK_CDMA) {
sendCDMAText(nr, message);
return;
}
sendSMS(nr, message);
}
要发送短信,您可以这样称呼:
sendTextMessage("555123123", "The little text message you wanted to send.");
(其中 555123123 是好莱坞电话号码。)
答案 2 :(得分:1)
public SendSms()
{
try {
_dc = (DatagramConnection)Connector.open(_openString);
byte[] data = msg.getBytes();
Datagram d = _dc.newDatagram(_dc.getMaximumLength());
d.setAddress("//" + addr);
_dc.send(d);
} catch ( IOException e) {}
System.exit(0);
}
你没有在这里设置消息^^(数据!)