所以,我有一個玩,它是可能刪除收到的短信。 不幸的是它並不是一帆風順的:(
我有一個接收器接收短信息,現在Android SMS傳入路由的工作方式是負責解碼消息的代碼段發送廣播(它使用sendBroadcast()
方法 - 這不幸的是,不是讓你簡單地調用abortBroadcast()
)每當有消息到達版本
我的接收器可能會或可能不會在系統短信接收器之前調用,並且在任何情況下,接收的廣播沒有屬性可以反映SMS表中的_id
列。
然而,我並不是一個很容易被阻止的人,我(通過一個Handler)發佈了一個延遲的消息,將SmsMessage作爲附加對象。 (我想你可以張貼自己一個Runnable太...)
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
延遲是有保證的時候郵件到達所有的廣播接收器將完成他們的東西,該消息將被安全隱藏在SMS表格中。
在這裏收到的消息(或的Runnable)是我做的:
case MSG_DELETE_SMS:
Uri deleteUri = Uri.parse("content://sms");
SmsMessage msg = (SmsMessage)message.obj;
getContentResolver().delete(deleteUri, "address=? and date=?", new String[] {msg.getOriginatingAddress(), String.valueOf(msg.getTimestampMillis())});
我用的起始地址和時間戳字段,以確保只刪除我感興趣的消息的概率非常高。如果我想變得更加偏執狂,我可以將msg.getMessageBody()
內容作爲查詢的一部分。
是的,消息被刪除(hooray!)。 不幸的是,通知欄未更新:(
當你打開通知區域中,您將看到消息坐在那裏你...但是當你上點按即可打開它 - 它不見了
!
對我而言,這還不夠好 - 我希望消息的所有痕跡都消失 - 我不希望用戶在沒有TXT的情況下認爲有TXT(這隻會導致錯誤報告)。
在操作系統內部,電話號碼爲MessagingNotification.updateNewMessageIndicator(Context)
,但是我那個類已經隱藏在API中,我不想僅僅爲了使指示符準確而複製所有的代碼。
我發現這樣做是非常不愉快的經歷任何與Android的手機功能非常有用。 – BobbyShaftoe 2009-01-07 04:28:52
好問題的伴侶。我正在尋找類似的東西:D乾杯 – 2010-09-28 08:54:29
最好的辦法是防止短信到達收件箱的第一位:http://stackoverflow.com/questions/1741628/can-we-delete-an-sms-in- android-before-it-reach-in-inbox/2566199#2566199 – 2011-01-24 18:00:00