Tôi chưa thể tìm thấy câu trả lời đã đăng cho câu hỏi này. Tại sao độ dài của một SMS dữ liệu được gửi một cách có lập trình từ một thể hiện giả lập đến một tin nhắn khác bị cắt bớt trên đầu nhận?
Ở đây tôi gửi 20 byte từ emulator-554-emulator-556, nhưng emulator-556 nhận chỉ 12 byte: SMS dữ liệu Android được gửi giữa hai trình giả lập bị cắt bớt khi chuyển tiếp
emulator-554: SMS gửi
/** Send data SMS between two emulators from 15555215554 to 15555215556. */
private void sendSMS()
{
final int udLength = 20; // SMS user data length in bytes
Log.d("SMS TEST", "SMSActivity.sendSMS ud.length=" + udLength);
byte[] payload = new byte[udLength];
for (byte i = 0; i < udLength; i++)
{
Log.d("SMS TEST", "payload[" + i + "]=" + i);
payload[i] = i;
}
Intent smsSentIntent = new Intent("SMS_SENT");
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, smsSentIntent, 0);
String destTelephone = "15555215556";
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendDataMessage(destTelephone, null, (short) 32766, payload, sentPI, null);
Log.d("SMS TEST", "SMSActivity.sendSMS COMPLETED!");
}
Đăng nhập trình mô phỏng người gửi:
02-25 19: 31: 00.793: D/SMS TEST (257): onCreate
02-25 19:31 : 00.793: D/SMS TEST (257): onResume
02-25 19: 31: 00.823: D/SMS TEST (257): SMSActivity.sendSMS ud.length = 20
02-25 19: 31: 00.823: D/SMS TEST (257): payload [0] = 0
02-25 19: 31: 00.823: D/SMS TEST (257): tải trọng [1] = 1
02-25 19: 31: 00.823: D/SMS TEST (257): payload [2] = 2
02-25 19: 31: 00.823: D/SMS TEST (257): tải trọng [3] = 3
02-25 19: 31: 00.823: D/SMS TEST (257): payload [4] = 4
02-25 19: 31: 00.823: D/SMS TEST (257): tải trọng [5] = 5
02-25 19: 31: 00.823: D/SMS TEST (257): tải trọng [6] = 6
02-25 19: 31: 00.823: D/SMS TEST (257): tải trọng [7] = 7
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [8] = 8
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [9] = 9
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [10] = 10
02-25 19: 31: 00.833: D/SMS TEST (257): trọng tải [11] = 11
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [12] = 12
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [13] = 13
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [14] = 14
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [15] = 15
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [16] = 16
02-25 19: 31: 00.833: D/SMS TEST (257): tải trọng [17] = 17
02-25 19: 31: 00.853: D/SMS TEST (257): tải trọng [18] = 18
02-25 19: 31: 00.853: D/SMS TEST (257): tải trọng [19] = 19
02-25 19: 31: 00.904: D/SMS TEST (257): SMSActivity.sendSMS HOÀN THÀNH!
02-25 19: 31: 27,044: D/SMS THI (257): onPause
02-25 19: 31: 27,583: D/SMS THI (257): onStop
emulator-556: SMS thu
public class SmsReceiver extends BroadcastReceiver
{
/** BroadcastReceiver listener. */
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
{
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
Log.d("SMS TEST", "SmsReceiver.onReceive: pdus.length=" + pdus.length);
SmsMessage inboundSMS = SmsMessage.createFromPdu((byte[]) pdus[0]); // pdus.length==1
byte[] ud = inboundSMS.getUserData();
int udLength = ud.length;
Log.d("SMS TEST", "SmsReceiver.onReceive: ud.length=" + udLength);
for (int i = 0; i < udLength; i++)
{
Log.d("SMS TEST", "ud[" + i + "]=" + ud[i]);
}
Log.d("SMS TEST", "SmsReceiver.onReceive COMPLETED!");
}
}
}
Log trên giả lập nhận:
02-25 19: 31: 01,593: D/SMS THI (258): SmsReceiver.onReceive: pdus.length = 1
02-25 19 : 31: 01.613: D/SMS TEST (258): SmsReceiver.onReceive: ud.length = 12
02-25 19:31:01.613: D/SMS THI (258): ra [0] = 0
02-25 19: 31: 01 613: D/SMS THI (258): ra [1] = 1
02-25 19:31: 01.613: D/SMS THI (258): ra [2] = 2
02-25 19: 31: 01 613: D/SMS THI (258): ra [3] = 3
02-25 19:31: 01.613: D/SMS THI (258): ra [4] = 4
02-25 19: 31: 01 613: D/SMS THI (258): ra [5] = 5
02-25 19:31: 01.613: D/SMS THI (258): ra [6] = 6
02-25 19: 31: 01 613: D/SMS THI (258): ra [7] = 7
02-25 19:31: 01.613: D/SMS THI (258): từ [8] = 8
02-25 19: 31: 01 613: D/SMS THI (258) ra [9] = 02-25 19: 31: 01 623: D/SMS THI (258): trong [10] =
ngày 02-ngày 25 Tháng 10 19: 31: 01 623: D/SMS THI (258): trong [11] = 3
02-25 19: 31: 01 623: D/SMS THI (258): SmsReceiver.onReceive HOÀN THÀNH!
Như bạn thấy chỉ có 11 byte đầu tiên của thông điệp dữ liệu nhận được ok.
Các DDMS bảng điều khiển giả lập cài đặt
Data=home, Speed=Full, Latency=None
băng.
Sử dụng:
Android Development Toolkit 16.0.1.v201112150204-238534
AVD mục tiêu:
Android 2.2 (API level 8)
Eclipse SDK 3.6.2
Đây có phải là một vấn đề giả lập? bất cứ ai có thể nhân rộng hành vi này? Tôi đã bị mắc kẹt trên vấn đề này quá lâu. Bất kỳ trợ giúp sẽ được thực sự đánh giá cao!
tôi đã cố gắng gửi dữ liệu Sử dụng cổng 28 nhưng vẫn có kết quả tương tự. –