目前我正在嘗試修改收到的短信,然後將其保存到收件箱。 由於系統是Android 4.4.4,因此不可能使用高優先級廣播接收器進行簡單攔截。這也是我修改Android源代碼(AOSP)而不是構建應用程序的原因。Android - 在到達收件箱之前修改短信主體
到目前爲止,我已經設法確定了一個有前途的類:InboundSmsHandler。在內部類SmsBroadcastReceiver中,當SMS已經到達並且稍後發送「SMS_RECEIVED」意圖時,onReceive方法被觸發。所以基本上這種方法似乎處在一個很好的位置。
問題是我無法修改隨onReceive的意圖提供的SMS。 我已經嘗試與PDU修改它:
byte[] pdu = createFakePDU("15555215556", "modified body");
intent.putExtra("pdus", new Object[] { pdu });
intent.putExtra("format", "3gpp");
(這種方法不奏效,短信應用已經顯示出原始消息)
試圖直接修改SmsMessage的身體: (我已經添加到SmsMessage的方法,以便能夠修改體)
SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);
int pduCount = msgs.length;
for(int i=0; i<pduCount; i++)
{
msgs[i].modifyBody("test");
}
(這種方法沒有工作,短信應用已經顯示出原始消息)
最後添加了一個新的短信數據庫:
....
contentResolver.insert(Uri.parse(SMS_URI), values);
....
(用這種方法的問題是,原來的短信仍然會到達,因此不僅是一個修改短信,但一個原始的短信和一個修改到達。原始的短信必須刪除,但我不知道如何。)
有誰知道我可以在它到達收件箱之前修改SMS嗎?
問候 薄荷
謝謝你的回答,但這不是我正在尋找的。在第一篇文章中,我寫道我正在修改Android系統,並且不開發應用程序。 – stackmint54
您寫道:「不可能使用高優先級的廣播接收器進行簡單的攔截,這也是我修改Android源代碼(AOSP)而不是構建應用程序的原因。」我沒有看到「也」,對不起。但是......無論如何,這可能同樣適用:放棄原始廣播,創建新的意圖並播放它。否則,您可能試圖修改意圖的「本地副本」,而不是Android系統存儲以傳遞給每個訂閱接收方的意圖。 – motoDrizzt
@motoDrizzt從KitKat開始,不能中止'SMS_RECEIVED'廣播。 –