#android
#Android
Вопрос:
Я выполнил следующие шаги
-
Строка 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] -
байт [] 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.