首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何通过短信收发数据

Android:如何通过短信收发数据
EN

Stack Overflow用户
提问于 2010-10-24 06:16:40
回答 2查看 6.1K关注 0票数 3

我想在Android中通过短信发送一些数据(不是多媒体)。这可以做到吗?我只想把极少量的数据从一部手机发送到另一部手机,比如XML之类的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-04 07:38:25

正确的方法是在SmsManager类中使用sendDataMessage。下面是一小段代码(SMSSender):

代码语言:javascript
复制
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendDataMessage(phoneNumber, null,
            (short) myApplicationPort, messageString.getBytes(), sentIntent, deliveryIntent);

下面是另一个小代码(SMSReceiver):

代码语言:javascript
复制
    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中的内容:

代码语言:javascript
复制
 <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> 
票数 3
EN

Stack Overflow用户

发布于 2010-10-24 14:53:20

据我所知,您可以通过SMS发送任何类型的文本数据,如XML、JSON字符串等。例如,您可以通过特定的散列来标识接收方上的数据消息,该散列可能是内容的一部分。接收方应该监听SMS_RECEIVED意图。

代码语言:javascript
复制
<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>

这样,您就可以获取数据,然后从消息存储库中删除消息,这样它就不会出现在会话中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4006360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档