在 KitKat 中接收短信问题

Issue receiving SMS in KitKat

我对 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 消息登陆默认 SMS应用程序的收件箱,这不是我想要的。

因此我的问题是,是否可以保留我的旧工作流程(从而防止 SMS 在扫描 SMS 后被传递到默认 SMS 应用程序,即旧的 abortBroadcast()-方法)或以其他方式转换我的应用程序发送到 "default SMS app",但如果 SMS 不是为我的应用程序准备的,无论如何都能够将它路由到第二个 "default SMS app"?

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

...my question is if it's possible to maintain my old workflow (thus preventing the SMS to be passed to the default SMS app after having scanned the SMS, i.e the old abortBroadcast() method)...

没有。默认的 SMS 应用程序会侦听它独有的广播,该广播无法被拦截或中止。 (SMS_DELIVER 广播。)我还要提到 SMS_RECEIVED 广播不能再中止,所以任何监听它的应用程序都会收到它。

...transform my app to a "default SMS app" but being able to route it anyways to a second "default SMS app" if the SMS was not meant for my app...

没有。如果您的应用是默认短信应用,它需要处理与传入消息相关的所有事情,包括接收、处理、存储等。您不能"hand it off"。

如果您的应用不是默认应用,则实际上无法阻止将传入消息写入 Provider。但是,我确实有一个 workaround 可能允许您的非默认应用程序在收到和写入消息后删除消息。 (此解决方案目前仅适用于 KitKat。我尚未将其用于 Lollipop。)