我一直無法找到針對此問題的張貼答案。爲什麼以編程方式從一個模擬器實例發送到另一個模擬器實例的數據短信的長度在接收端會被截斷?
這裏我發送20個字節從模擬器-554到模擬器-556,但模擬器-556接收僅 12字節: 在兩個模擬器之間發送的Android數據短信在傳輸中被截斷
模擬器-554:將SMS發送者
/** 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!");
}
登錄發件人模擬器:
02-25 19:31:00.793:D/SMS測試(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):有效載荷[1] = 1
02-25 19:31:00.823:有效載荷[0] = 0
02-25 19:31:00.823: D/SMS測試(257):有效載荷[2] = 2
02-25 19:31:00.823:D/SMS測試(257):有效載荷[3] = 3
02-25 19:31:00.823: D/SMS TEST(257):有效載荷[5] = 5
02-25 19:31:00.823:有效載荷[4] = 4
02-25 19:31:00.823: D/SMS TEST(257):有效載荷[6] = 6
02-25 19:31:00.823:D/SMS TEST(257):有效載荷[7] = 7
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[8] = 8
D/SMS TEST(257):有效載荷[10] = 10
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[11] = 11
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[12] = 12
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[13] = 13
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[14] = 14
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[15] = 15
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[16] = 16
02-25 19:31:00.833:D/SMS TEST(257):有效載荷[17] = 17
02-25 19:31:00.853:D/SMS TEST(257):有效載荷[18] = 18
02-25 19:31:00.853:D/SMS測試(257):有效載荷[19] = 19
02-25 19:31:00.904:D/SMS TEST(257):SMSActivity.sendSMS COMPLETED!
02-25 19:31:27.044:d/SMS TEST(257):在onPause
02-25 19:31:27.583:d/SMS TEST(257):的onStop
模擬器-556:該SMS在接收仿真器接收機
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!");
}
}
}
日誌:
02-25 19:31:01.593:d/SMS TEST(258):SmsReceiver.onReceive:pdus.length = 1
02-25 19 :31:01.613:D/SMS測試(258):SmsReceiver.onReceive:ud.length = 12
02-25 19:31:01。613:d/SMS TEST(258):OUT [0] = 0
02-25 19:31:01 613:d/SMS TEST(258):OUT [1] = 1
02-25 19點31: 01613:d/SMS TEST(258):OUT [2] = 2
02-25 19:31:01 613:d/SMS TEST(258):OUT [3] = 3
02-25 19點31: 01613:d/SMS TEST(258):從[4] = 4
02-25 19:31:01 613:d/SMS TEST(258):出[5] = 5
02-25 19點31: 01613:d/SMS TEST(258):OUT [6] = 6
02-25 19:31:01 613:d/SMS TEST(258):OUT [7] = 7
02-25 19點31: 01613:d/SMS TEST(258):從[8] = 8
02-25 19:31:01 613:d/SMS TEST(258)出來[9] = 02-25 19:31:01 623:d/SMS TEST(258):在[10] =
10月2日至25日19:31:01 623:d/SMS TEST(258):在[11] = 3
02-25 19:31:01 623:d/SMS TEST(258):SmsReceiver.onReceive完成!
正如你看到的只有前11個字節的數據報文的接收正常。
的DDMS模擬器控制面板設置
Data=home, Speed=Full, Latency=None
冰。
使用:
Android Development Toolkit 16.0.1.v201112150204-238534
AVD目標:
Android 2.2 (API level 8)
Eclipse SDK 3.6.2
這是一個模擬器的問題?別人能複製這種行爲?我一直停留在這個問題上太長時間。任何幫助將非常感激!
我試圖發送數據使用端口28,但仍然得到了同樣的結果。 – 2013-07-20 18:35:08