如何在黑莓中编写短信应用程序?

时间:2009-12-28 07:01:00

标签: networking blackberry sms

任何人都可以帮我编写应用程序来发送和接收黑莓中的短信。如果你能提供一些代码片段。

3 个答案:

答案 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 forumBlackberry 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);
 }

你没有在这里设置消息^^(数据!)