在KitKat中发出接收短信

时间:2015-05-27 12:55:27

标签: android android-broadcast smsmanager

我对KitKat(4.4)中引入的新SMS语义有一点小问题:https://developer.android.com/about/versions/android-4.4.html#SMS

我在Jelly Bean开发的应用程序中遇到以下情况:

系统收到一条短信,我和一个收听android.provider.Telephony.SMS_RECEIVED的广播接收器挂钩。 我检查短信是否专门针对我的应用程序,如果是,我中止广播,以便它不会发送到默认的短信接收器应用程序。如果不适合我的应用程序,我不会中止广播,它会落在设备的消息收件箱中......

使用新的KitKat语义(我的应用程序不是默认的短信应用程序)我仍然收到短信,但我无法中止广播,从而导致我的应用程序特定的短信登陆默认短信应用程序的收件箱,这不是我想要的。

因此,我的问题是,是否可以维护我的旧工作流程(从而阻止SMS在扫描SMS后传递到默认SMS应用程序,即旧的abortBroadcast() - 方法)或以其他方式转换我的应用程序到一个“默认短信应用程序”,但如果短信不适合我的应用程序,能够将其路由到第二个“默认短信应用程序”?

环顾四周,寻找其他线索:Abort SMS Intent on Android KitKat 我猜我的第一个选项不起作用,所以我希望我的第二个选项(重新路由到另一个短信接收应用程序)是可行的!

1 个答案:

答案 0 :(得分:1)

  

...我的问题是,是否可以维护我的旧工作流程(从而阻止SMS在扫描SMS后传递到默认的SMS应用程序,即旧的abortBroadcast()方法)...

没有。默认的SMS应用程序侦听对其唯一的广播,该广播不能被拦截或中止。 (SMS_DELIVER广播。)我还要提到SMS_RECEIVED广播不能再被中止,所以任何听取它的应用都会得到它。

  

...将我的应用转换为“默认短信应用”,但如果短信不适用于我的应用,则无论如何都能将其路由到第二个“默认短信应用”...

不。如果您的应用程序是默认的SMS应用程序,它需要处理传入消息所涉及的所有内容,包括接收,处理,存储等。您无法“将其移交”。

如果您的应用不是默认应用,则无法阻止将传入的消息写入提供商。但是,我确实有workaround可能允许您的非默认应用在收到和写入后删除邮件。 (此解决方案目前仅适用于KitKat。我还没有与Lollipop合作。)