В настоящее время я пытаюсь изменить входящее SMS, прежде чем оно будет сохранено в папке «Входящие». Поскольку система Android 4.4.4, простой перехват с помощью высокоприоритетного широковещательного приемника невозможен. Это также причина, по которой я модифицирую Android Source (AOSP), а не создаю приложение.
Пока мне удалось выделить многообещающий класс: InboundSmsHandler. Внутри внутреннего класса SmsBroadcastReceiver метод onReceive запускается, когда приходит SMS, а затем отправляет намерение «SMS_RECEIVED». Так что в целом этот метод кажется удачным.
Проблема в том, что я не могу изменить SMS, которое доставляется с намерением onReceive. Я уже пробовал изменить его с помощью PDU:
byte[] pdu = createFakePDU("15555215556", "modified body");
intent.putExtra("pdus", new Object[] { pdu });
intent.putExtra("format", "3gpp");
(Этот подход не сработал, приложение SMS показало исходное сообщение)
Попытка изменить тело сообщения SmsMessage напрямую: (я добавил в SmsMessage метод, чтобы иметь возможность изменять тело сообщения)
SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);
int pduCount = msgs.length;
for(int i=0; i<pduCount; i++)
{
msgs[i].modifyBody("test");
}
(Этот подход не сработал, приложение SMS показало исходное сообщение)
И наконец добавили новое смс в базу:
....
contentResolver.insert( Uri.parse( SMS_URI ), values );
....
(Проблема с этим подходом заключается в том, что исходное SMS-сообщение все еще приходит, и поэтому приходит не только одно измененное SMS-сообщение, но и одно исходное SMS-сообщение, а также одно измененное. Исходное SMS-сообщение необходимо удалить, но я не знаю, как это сделать.)
Кто-нибудь знает, как я могу изменить SMS до того, как оно придет во входящие?
С уважением, мята