如何防止短信进入Android Kitkat的收件箱

时间:2013-12-27 18:02:53

标签: android android-broadcast

在以前版本的android中,我们可以使用以下代码阻止SMS:

 <receiver android:name=".broadcastreceivers.OnSMSReceived"
                  android:exported="true" android:permission="android.permission.BROADCAST_SMS">

            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>

并且在广播接收器中,abortBroadcast()函数阻止SMS进入收件箱。 但是这种方法在kitkat中不起作用,因为来自Kitkat的SMS只会被默认的SMS应用程序接收。是否有任何解决方法可以在kitkat中创建SMS拦截器应用程序?

3 个答案:

答案 0 :(得分:6)

您应该阅读此页:http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

KitKat中引入了一项更改,它一次只允许一个应用程序(默认的SMS应用程序)对SMS DB具有写入权限并能够使用它。

您有2种方法可以解决您的问题:

  • 关于如何请求用户在您需要执行更改期间将默认SMS应用程序切换到您的应用程序时,请遵循Google的建议(一旦您完成此操作,请允许用户切换回原始默认短信应用程序)。

  • 找到一种临时的hacky方式来做你需要做的事情。作为提示,有一个隐藏的API:AppOpsManager#setMode,您可以利用它来为您的应用程序提供写入权限(OP_WRITE_SMS),然后转到此XDA页面以了解有关它的更多信息:http://forum.xda-developers.com/showthread.php?t=2551072 < / p>

毋庸置疑,任何hacky解决方案都只是暂时的,因为私有/隐藏API可能随时发生变化。我们强烈建议您实施Google建议我们实施的内容,并将其描述为here

答案 1 :(得分:0)

您可以检查您的应用程序是否是默认的SMS应用程序。为此目的,请参阅this link。您可以获取默认SMS应用的包名称,并检查您的姓名,如果彼此相等,则可以使用“从收件箱中删除”阻止SMS。这应该适合你。

答案 2 :(得分:0)

我知道这是一个老问题,但这是KitKat短信拦截的可能解决方案:

http://superdupersms.com/

由于它不是技术解决方案,而是基于产品的解决方案,因此这可能是评论而不是“答案” - 我参与了开发。

但我还没有找到任何其他应用程序允许其他应用程序与SMS数据库交互,就像他们在KitKat之前所做的那样 - 这直接解决了这个问题。此解决方案允许非默认SMS应用程序阻止SMS。