Я хотел был бы доставить сообщения, полученные через C2DM, в телефонные SMS-сообщения и пришел к выводу, что это может быть возможно, обманув Android в мысли, что C2DM - это подлинное SMS-сообщение, и пусть оно работает на нем ,Предоставление почтового ящика C2DM для SMS
Я проследил справедливую часть исходного кода Android, и ничего не происходит в стеке телефона до того, как умывается SMS_RECEIVED, что привело меня к мысли, что самый простой способ сделать это - создать PDU из полезной нагрузки c2DM и увольнять намерение SMS_RECEIVED, которое теоретически должно привести к тому, что стандартное приложение SMS будет потреблять его и записать его в папку входящих сообщений SMS.
Фрагмент кода ниже - это доказательство концепции. Я проверил код PDU на жесткий диск. PDU действителен и был сгенерирован с использованием утилиты.
Он, похоже, не работает, и мне было интересно, не делаю ли я что-то явно не так, или если спуск по этому маршруту является не стартером.
String pdu = "07911326040000F0040B911346610089F60000208062917314080CC8F71D14969741F977FD07";
byte[][] pdus = null;
pdus = new byte[1][];
pdus[0] = hexStringToByteArray(pdu);
Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED");
intent.putExtra("pdus", pdus);
intent.putExtra("format", "3gpp");
MyAndroidAppActivity.this.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
Любая помощь или комментарии были бы высоко оценены!
Благодарим вас за очень полезный и информативный пост. Совершенно очевидно, что определенные намерения должны быть ограничены ОС. У меня есть план резервного копирования, который должен напрямую записываться в папку «Входящие» SMS, которая, как я знаю, недокументирована, может сломаться и не является большой или умной. Я предполагаю, что это обходит механизм уведомления, поэтому сообщения будут сохранены, но никаких уведомлений пользовательского интерфейса не будет поднято. Я предполагаю, что единственный способ доказать это - попробовать! –