SMS с данными Android, отправленные между двумя эмуляторами, обрезаются - PullRequest
5 голосов
/ 25 февраля 2012

Мне не удалось найти опубликованный ответ на этот вопрос.Почему длина SMS с данными, передаваемого программно из одного экземпляра эмулятора в другой, усекается на принимающей стороне?
Здесь я отправляю 20 байтов от emulator-554 до emulator-556 , но эмулятор-556 получает только 12 байт:


эмулятор-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 (257): onResume
02-25 19: 31: 00.823: ТЕСТ D / SMS (257): SMSActivity.sendSMS ud.length = 20
02-25 19: 31: 00.823: ТЕСТ D / SMS (257): полезная нагрузка [0] = 0
02-25 19: 31: 00.823: ТЕСТ Д / СМС (257): полезная нагрузка [1] = 1
02-25 19: 31: 00.823: ТЕСТ Д / СМС (257): полезная нагрузка [2] = 2
02-25 19: 31: 00.823: ТЕСТ D / SMS (257): полезная нагрузка [3] = 3
02-25 19: 31: 00.823: ТЕСТ D / SMS (257): полезная нагрузка [4] =4
02-25 19: 31: 00.823: ТЕСТ D / SMS (257): полезная нагрузка [5] = 5
02-25 19: 31: 00.823: ТЕСТ Д / SMS (257): полезная нагрузка [6] = 6
02-25 19: 31: 00.823: ТЕСТ D / SMS (257): полезная нагрузка [7] = 7
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [8] = 8
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [9] =9
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [10] = 10
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [11] = 11
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [12] = 12
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка[13] = 13
02-25 19: 31: 00,833: ТЕСТ D / SMS (257): полезная нагрузка [14] = 14
02-25 19: 31: 00,833: ТЕСТ D / SMS (257): полезная нагрузка [15] = 15
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [16] = 16
02-25 19: 31: 00.833: ​​ТЕСТ D / SMS (257): полезная нагрузка [17] = 17
02-25 19: 31: 00,853: ТЕСТ D / SMS (257): полезная нагрузка [18] = 18
02-25 19: 31: 00,853: D / SMSТЕСТ (257): полезная нагрузка [19] = 19
02-25 19: 31: 00.904: ТЕСТ Д / СМС (257): SMSActivity.sendSMS ЗАВЕРШЕН!
02-25 19: 31: 27.044: D /SMS-ТЕСТ (257): onPause
02-25 19: 31: 27.583: D / SMS-ТЕСТ (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 (258): ud [0] = 0
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [1] = 1
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [2] = 2
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [3] = 3
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [4] = 4
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [5] = 5
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [6] = 6
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [7] =7
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [8] = 8
02-25 19: 31: 01.613: ТЕСТ D / SMS (258): ud [9] = 9
02-25 19: 31: 01.623: ТЕСТ D / SMS (258): ud [10] = 10
02-25 19: 31: 01.623: ТЕСТ D / SMS (258): ud[11] = 3
02-25 19: 31: 01.623: ТЕСТ D / SMS (258): SmsReceiver.onReceive COMPLETED!


Как видите, получены только первые 11 байтов сообщения данных.ok.
Настройки панели управления эмулятора DDMS Data=home, Speed=Full, Latency=None.
Использование: Android Development Toolkit 16.0.1.v201112150204-238534
AVD target: Android 2.2 (API level 8)
Eclipse SDK 3.6.2

Это проблема с эмулятором?Кто-нибудь еще может повторить это поведение?Я застрял на этой проблеме слишком долго.Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 15 июня 2013

Может быть связано с номером порта.Попробуйте использовать номер порта менее 256.

...