我对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 我猜我的第一个选项不起作用,所以我希望我的第二个选项(重新路由到另一个短信接收应用程序)是可行的!
答案 0 :(得分:1)
...我的问题是,是否可以维护我的旧工作流程(从而阻止SMS在扫描SMS后传递到默认的SMS应用程序,即旧的abortBroadcast()方法)...
没有。默认的SMS应用程序侦听对其唯一的广播,该广播不能被拦截或中止。 (SMS_DELIVER
广播。)我还要提到SMS_RECEIVED
广播不能再被中止,所以任何听取它的应用都会得到它。
...将我的应用转换为“默认短信应用”,但如果短信不适用于我的应用,则无论如何都能将其路由到第二个“默认短信应用”...
不。如果您的应用程序是默认的SMS应用程序,它需要处理传入消息所涉及的所有内容,包括接收,处理,存储等。您无法“将其移交”。
如果您的应用不是默认应用,则无法阻止将传入的消息写入提供商。但是,我确实有workaround可能允许您的非默认应用在收到和写入后删除邮件。 (此解决方案目前仅适用于KitKat。我还没有与Lollipop合作。)