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

1

Я сделал следующие шаги

  • Строка sms_txt = "aaaaaaaaaa"

    SubmitPdu smsg = SmsMessage.getSubmitPdu( "+919412354222", "+919535570716", sms_txt, false);

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

  • byte [] 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 functiom?

Теги:

1 ответ

1

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню