Чтобы создать PDU, в который можно передавать SmsMessage.createFromPdu(byte[] pdu). Я "Транслирую намерение" одному из моихBroadcastReciever, который прослушивает SMS-сообщения.
Один BroadcastReciever
Использование android.provider.Telephony.SMS_RECEIVED для "реальных" SMS
Использование пользовательского intent-filter действия для этих новых "SMS-сообщений приложения".
// getting SMS information from Pdu. for (inti=0; i < pdusObj.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]); }
for (SmsMessage currentMessage : messages) { //the currentMessage.getDisplayOriginatingAddress() //or .getDisplayMessageBody() is null if I Broadcast a fake sms Log.i("BB", "address:"+currentMessage.getDisplayOriginatingAddress()+" message:"+currentMessage.getDisplayMessageBody()); ...
Итак, я хочу, чтобы мой BroadcastReciever мог обрабатывать оба типа сообщений без добавления дополнительного кода
(да, я знаю, что у меня может быть другое BroadcastReciever для другого intent-filter действия, но я хотел бы на самом деле осуществить это, поскольку я знаю, что это можно сделать, я упрямый)
Исследования:
Я занимался исследованиями весь день и ночь. Я пытался написать свой собственный, хотя я очень плохо разбираюсь в математике и преобразованиях и создаю подходящий алгоритм. Я просмотрел разделы Stack о PDU и Создание PDU Android, но ссылка в ответе не работает. Я даже посмотрел на com.google.android.mms.pdu исходный код
Я не планирую ничего делать с PDU, кроме локального использования, я не хочу жестко закодированных PDU в моем коде, потому что я не использую PDU повторно.
Если есть что-то, что я могу добавить к коду, который я использую для добавления в "исходный адрес", это сработает. Или у кого-нибудь есть информация о библиотеке, о которой я не знаю?
Спасибо
Обновления:
пробовал
byte[] by =(byte[])(SmsMessage.getSubmitPdu("12345", "1234", "hello", false).encodedMessage);
который дает мне следующее (в шестнадцатеричном представлении)
for (inti=0; i < messages.length; i++) { pduObjs[i] = (byte[]) messages[i]; } byte[][] pdus = newbyte[pduObjs.length][]; intpduCount= pdus.length; SmsMessage[] msgs = newSmsMessage[pduCount]; for (inti=0; i < pduCount; i++) { pdus[i] = pduObjs[i]; msgs[i] = SmsMessage.createFromPdu(pdus[i]); } return msgs; }
Ответ 2
Прошло много времени с тех пор, как я выполнял какие-либо прямые операции с PDU, но когда я это сделал, я быстро сдался и использовал SMSLib: утилиты PDU, которые он отлично использовал для отправки через телефоны Nokia (по последовательной ссылке). Мое предположение (которое может быть неверным) заключается в том, что они будут работать и для Android, предполагая, что интерфейс действительно соответствует спецификации.
Ответ 3
Проверьте этот код в console.c. Здесь эмулятор Android создает pdu и RIL.java где сообщение CMT преобразуется в SmsMessage. Вы можете использовать SmsMessage.getPdu для получения pdu. Но SmsMessage.newFromCmt похоже, что это внутренний API. Так что это может быть ненадежно.
Далее, это только для Gsm, cdma имеет совершенно другой поток кодов, и поскольку RIL.java и модем полностью зависят от производителя, это может работать только на эмуляторе.
Обычно GSM-код более надежен на Android, поэтому может также работать на телефоне gsm. Попробуйте.