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