Android:如何通过短信发送和接收数据

时间:2010-10-23 22:16:40

标签: android sms

我想通过Android中的短信发送一些数据(NOT MULTIMEDIA)。可以这样做吗?我只想将一小部分数据从一部手机发送到另一部手机,如XML或其他东西。

2 个答案:

答案 0 :(得分:3)

执行此操作的正确方法是使用SmsManager类中的sendDataMessage。 这是一个小代码(SMSSender):

SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendDataMessage(phoneNumber, null,
            (short) myApplicationPort, messageString.getBytes(), sentIntent, deliveryIntent);

这是另一个小代码(SMSReceiver):

    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Object[] pdusObj = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdusObj.length];

        // getting SMS information from PDU
        for (int i = 0; i < pdusObj.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
        }

        for (SmsMessage currentMessage : messages) {
            if (!currentMessage.isStatusReportMessage()) {

                String messageBody = currentMessage.getDisplayMessageBody();

                    byte[] messageByteArray = currentMessage.getPdu();

                    // skipping PDU header, keeping only message body
                    int x = 1 + messageByteArray[0] + 19 + 7;

// I'm not sure about this last line, as I'm not converting the bytes back to string, so test it out
                    String realMessage = new String(messageByteArray, x, messageByteArray.length-x);

以下是您应该添加到AndroidManifest.xml的内容:

 <receiver android:name=".SMSReceiver">
   <intent-filter>
     <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
     <data android:scheme="sms" />
     <data android:host="localhost" />
     <data android:port="12345" /><!-- this number should be the same as the `myApplicationPort` from above!!! -->
   </intent-filter>
 </receiver> 

答案 1 :(得分:1)

据我了解你的问题,我说你可以通过短信发送任何类型的文本数据,如XML,JSON字符串或其他任何内容。例如,您可以通过可能是内容一部分的特定哈希在接收器上标识您的数据消息。接收方应该监听SMS_RECEIVED意图。

<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>

通过这种方式,您可以从邮件存储中获取数据并从中删除邮件,这样就不会显示在对话中。