所以,我有一个玩,它是可能删除收到的短信。 不幸的是它并不是一帆风顺的:(
我有一个接收器接收短信息,现在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