Android 广播接收机长二进制短信

Android 广播接收机长二进制短信,android,Android,我在接收长二进制短信时遇到问题。客户端应该接收多部分二进制SMS。在搜索stackoverflow时,人们提到onReceive()只能触发一次。从那里你可以连接多条短信 我不确定发送二进制短信时是否也是这样。我收到2条短信,onReceive被触发两次。SMS彼此独立,因此无法连接 AndroidManifest: <uses-permission android:name="android.permission.READ_SMS" /> <uses-permissio

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

我不确定发送二进制短信时是否也是这样。我收到2条短信,onReceive被触发两次。SMS彼此独立,因此无法连接


AndroidManifest:

 <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=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
SmsMessage[]messages=新SmsMessage[pdus.length];
对于(int i=0;i-1){
ByteArrayOutputStream os=新建ByteArrayOutputStream();
for(int i=0;i
发现这不是客户端的问题,而是服务器端的问题。他们没有在用户数据头中包含指示消息是串联SMS的部分


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

Hi@musharapp,你如何验证你的结论?
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());
    }
}