что такое формат SMS PDU для полученных sms в Android

#android

#Android

Вопрос:

Я выполнил следующие шаги

  1. Строка sms_txt = «aaaaaaaaaa»;
    SubmitPdu smsg = SmsMessage.getSubmitPdu(» 919412354222″,» 919535570716″, sms_txt, false);

  2. Запишите значение закодированного сообщения из smsg
    закодированного сообщения = [1, 0, 12, -111, 25, 89, 83, 117, 112, 97, 0, 0, 10, -31, 112, 56, 28, 14, -121, -61, -31, 48]

  3. байт [] sBuf={1, 0, 12, -111, 25, 89, 83, 117, 112, 97, 0, 0, 10, -31, 112, 56, 28, 14, -121, -61, -31, 48};
    SmsMessage smsg1 = SmsMessage.createFromPdu (sBuf);

Я получаю mWrappedSmsMessage = NULL

Итак, мой вопрос: в чем разница между данными PDU, созданными из getSubmitPdu функции, и ожидаемым вводом pdu для createFromPdu функции?

Ответ №1:

Я хотел использовать getSubmitPdu в некоторых модульных тестах, поэтому я решил найти ответ, отладив исходный код GSM. В двух словах, getSubmitPdu полон проблем. Он выполняет по крайней мере две вещи, которые несовместимы с createFromPdu (что, я считаю, правильно для GSM, потому что его можно использовать для создания SmsMessage из входящего SMS intent, предоставленного BroadcastReceiver). Я не смотрел дальше, чем два, которые я нашел.

Сначала он пытается использовать первый байт в качестве информации о протоколе. Метод createFromPdu ожидает, что первый байт будет размером закодированного адреса сервисного центра (параметр scAddress в getSubmitPdu). Возможно, вы могли бы исправить это, добавив закодированный scAddress (доступный из класса SubmitPdu) и выбросив первый байт, но смотрите следующий выпуск.

Во-вторых, в нем отсутствует закодированная временная метка (6 байт), которая должна находиться между адресом назначения и телом сообщения. Метод createFromPdu безоговорочно пытается проанализировать временную метку.

На данный момент я рассматриваю возможность использования PduUtils в SMSLib (http://code.google.com/p/smslib /) для создания Pdu.