我们可以在Android到达收件箱之前删除其中的短信吗?

uma*_*ant 100 sms android

我正在从收件箱中删除短信,但我想知道:如何在收到收件箱之前将其删除?

Chr*_*Orr 186

是.

尽管对这个问题有一些负面的反应,但短信拦截也有合法​​用途.例如:自动化电话号码验证,通过短信提供的服务(虽然通常应该通过数据短信进行),或者用于通过处理特殊格式的消息来改善用户体验的应用程序,以便在一个不错的Android中显示它们特定的用户界面.

从Android 1.6开始,传入的SMS消息广播(android.provider.Telephony.SMS_RECEIVED)作为" 有序广播 " 传送- 这意味着您可以告诉系统哪些组件应该首先接收广播.

如果您android:priority在收听短信时定义属性<intent-filter>,则会在本机SMS应用程序之前收到通知.

此时,您可以取消广播,防止广播传播到其他应用.


更新(2013年10月):当Android 4.4到达时,它将更改SMS API,这可能会影响应用程序影响SMS传递的能力.
查看此Android开发人员博客文章以获取更多信息:http:
//android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

  • 我的天啊.这是真的!我一直认为这将是另一种方式!为了证明,请看[这里](https://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=telephony/java/com/android/internal/telephony/SMSDispatcher的.java; HB = HEAD#L420).哇.希望我能给你一个以上的upvote;) (13认同)
  • 重要的是要记住新的API级别19,正如@ChristopherOrr在他的更新中所说的那样.在那里它说"从Android 4.4开始 - 你的应用程序中止SMS_RECEIVED_ACTION广播的任何尝试都将被忽略,因此所有感兴趣的应用程序都有机会接收它."`. (7认同)
  • 这对我有用:)我的应用程序首先捕获消息并且没有通知但是然后短信没有到达消息收件箱.就像它从未收到过,只在我的应用程序中.有没有办法使用中止广播但是在收件箱中接收消息? (2认同)

Sun*_*hoo 11

步骤1:创建自定义广播接收器以接收短信.编写逻辑以中止最广泛的内容,以便邮件无法在您的收件箱中使用

public class SMSReceiver extends BroadcastReceiver
{
    public void onReceive(Context context, Intent intent)
    {
     if(conditionMatches){
     abortBroadcast();
     }
    }
}
Run Code Online (Sandbox Code Playgroud)

步骤2在AndoridManifest中注册广播接收器并将android:priority值设置为大数

<receiver android:name=".SMSReceiver" >
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

而已

上面的代码是如何工作的

由于接收广播的短信是有序广播,优先级高的接收者将首先接收,因此您的应用程序首先接收,并在收到您正在中止广播.所以没有其他应用程序可以接收它.因此短信不会存在于收件箱中


小智 9

以下("android:priority"和abortBroadcast())解决方案的工作原理只要Android Messaging应用程序为默认值(我的意思是股票Android Messaging应用程序).如果用户安装"GoSMSPro"或"HandcentSMS",这些应用程序仍会在收件箱中显示消息,我相信这是由于"android:priority".如果手机上安装了第三方消息传递应用程序,我认为没有更好的方法来解决上述问题.

  • @FelipeMicaroniLalli实际上是GO短信PRO等...使用2147483647作为他们的优先事项 (4认同)
  • 它是最大的无符号整数http://en.wikipedia.org/wiki/Integer_(computer_science),Android支持的最大值为999. http://developer.android.com/reference/android/content/IntentFilter.html# SYSTEM_HIGH_PRIORITY (3认同)
  • 好点子.但这应该是一个评论,而不是一个答案.是否有可能移动它?---如果你把一个非常高的价值怎么办?作为android:priority ="9999"?例如?你试过吗? (2认同)
  • @NomanHamid这是正确的.999是最高优先级.您可以使用您选择的任何数字,但Android最多只能保证999.任何大于此的东西,它可能会或可能不会不稳定并产生意想不到的后果.就个人而言,我不得不使用2147483647尝试浏览GO SMS PRO等应用程序.有时候它对用户起作用,有时却没有. (2认同)