1

接收长二进制短信时遇到问题。客户端应该接收多部分二进制短信。在搜索 stackoverflow 时,人们提到 onReceive() 只能被触发一次。从那里您可以连接多个 SMS。

我不确定发送二进制短信时是否相同。我收到 2 条短信,并且 onReceive 被触发了两次。SMS 彼此分开,因此无法连接。


安卓清单:

 <uses-permission android:name="android.permission.READ_SMS" />
 <uses-permission android:name="android.permission.SEND_SMS" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
 <uses-permission android:name="android.permission.INTERNET" />

 <receiver
        android:name="com.myapp.smsnotification.SMSReceiver"
        android:enabled="true" >
        <intent-filter android:priority="100" >
            <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
            <data
                android:host="localhost"
                android:port="9515"
                android:scheme="sms" />
        </intent-filter>
 </receiver>

SMSReceiver.java

在我的 onReceive()

Bundle bundle = intent.getExtras();
if (bundle != null) {
    Object[] pdus = (Object[]) bundle.get("pdus");
    SmsMessage[] messages = new SmsMessage[pdus.length];
    for (int i = 0; i < pdus.length; i++) {
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
    }
    try {
        if (messages.length > -1) {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            for (int i = 0; i < messages.length; i++) {
                SmsMessage message = messages[i];
                os.write(message.getUserData());
            }
            byte[] stream = os.toByteArray();
            // do something with stream
        }
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }
}
4

1 回答 1

0

发现这不是客户端的问题,而是服务器端的问题。他们没有在用户数据标题中包含表明该消息是串联 SMS 的部分。

如果遵循该协议,Android 将能够检测到它并相应地处理它们,等待所有 SMS 到达并在包含所有接收到的 SMS 后触发 SMS 广播接收器。

于 2013-07-23T03:05:59.620 回答