Цель: (ПРИМЕЧАНИЕ. Выбранный ответ генерирует PDU GSM (3gpp) для CDMA (3gpp2), пожалуйста, см. здесь p >
Создание PDU, который можно передать в SmsMessage.createFromPdu(byte[] pdu)
.
Я "трансляция намерения" в один из моих BroadcastReciever
, который прослушивает SMS-сообщения.
Один BroadcastReciever
Использование android.provider.Telephony.SMS_RECEIVED
для "реальных" SMS
Использование пользовательского действия intent-filter
для этих новых "SMS-сообщений приложения".
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];
// getting SMS information from Pdu.
for (int i = 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
, но я хотел бы на самом деле снять это, поскольку я знаю, что это можно сделать, я упрямый)
Исследование:
Я занимаюсь исследованиями весь день и ночь. Я попытался написать свой собственный, хотя я очень страшен с математикой и преобразованиями и создаю подходящий алгоритм. Я просмотрел темы в блоках PDU и Создать PDU Android, но ссылка нарушена в ответе, Я даже посмотрел на com.google.android.mms.pdu
исходный код
до сих пор мне удалось создать PDU без "исходящего адреса", используя какой-то код из http://www.wrankl.de/JavaPC/SMSTools.html
PDU:
назначение: 555 сообщение: helloworld
"1100038155f50000aa0ae8329bfdbebfe56c32"
Что явно недействительно...
Боковые заметки:
Я не планирую ничего делать с PDU помимо локального использования, я не хочу жестко закодированный PDU в своем коде, потому что я не повторно использую PDU.
Если есть что-то, что я могу добавить к коду, который я использую для добавления в "исходящий адрес", это будет работать. Или у кого-нибудь есть информация о библиотеке, о которой я не знаю?
Спасибо
Обновление:
попробовал
byte[] by =(byte[])(SmsMessage.getSubmitPdu("12345", "1234", "hello", false).encodedMessage);
который дает мне следующее (в шестнадцатеричном представлении)
"0000100200000000000000000000000004010203040000000e000320ec400107102e8cbb366f00"
не работает