我在收到长二进制短信时遇到问题。客户端应该接收多部分二进制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 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());
}
}
答案 0 :(得分:0)
发现它不是客户端的问题,而是服务器端的问题。它们未在用户数据标头中包含指示该消息是串联SMS的部分。
如果遵循该协议,Android将能够检测到并相应地处理它们,等待所有SMS到达并且一旦包含所有收到的SMS就发射SMS广播接收器。