Android – 在到达收件箱之前修改SMS正文

目前我正在尝试修改收到的短信,然后将其保存到收件箱.

由于系统是
Android 4.4.4,因此无法使用高优先级广播接收器进行简单拦截.这也是我修改Android Source(AOSP)而不是构建App的原因.

到目前为止,我已经设法识别出一个有前途的类:InboundSmsHandler.在内部类SmsBroadcastReceiver中,当SMS到达时触发onReceive方法,稍后发送“SMS_RECEIVED”意图.所以基本上这种方法似乎处于一个好位置.

问题是我无法修改随onReceive打算提供的SMS.
我已经尝试用PDU修改它:

byte[] pdu = createFakePDU("15555215556", "modified body");
intent.putExtra("pdus", new Object[] { pdu });
intent.putExtra("format", "3gpp");

(这种方法不起作用,SMS App已显示原始消息)

试图直接修改SmsMessage的主体:
(我已经为SmsMessage添加了一个能够修改主体的方法)

SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);
int pduCount = msgs.length;
for(int i=0; i<pduCount; i++)
{
    msgs[i].modifyBody("test");
}

(这种方法不起作用,SMS App已显示原始消息)

最后在数据库中添加了一条新的短信:

....
contentResolver.insert( Uri.parse( SMS_URI ), values );

....

(这种方法的问题是原始的SMS仍然到达,因此不仅一个修改的短信,而是一个原始的短信和一个修改到达.原始的短信必须删除,但我不知道如何.)

有没有人知道如何在收到收件箱之前修改短信?

最好的祝福
薄荷

最佳答案 AFAIK,4.4.4没有任何东西可以通过注册您的BroadcastReceiver,设置正确的权限和正确的意图过滤器来阻止您的应用程序接收SMS.那是:

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

<action android:name="android.provider.Telephony.SMS_RECEIVED" />

(如果我正确记住它们)

然后在您的BroadcastReceiver中调用abortBroadcast(),根据需要修改SMS,最后手动存储它

getContentResolver().insert(Uri.parse("content://sms/sent"), values);
点赞