在另一个应用程序中抑制/阻止BroadcastReceiver

Go SMS最近更新了一个新function“禁用其他消息通知”。 该function导致其他应用程序收听传入的SMS广播不会触发。 例如,我的应用程序Shady SMS会监听传入的SMS广播以发送通知,并实际提取并保存SMS消息。

当启用Go SMS中的这个新function时,Shady不会发送通知,也不会保存最终不响应传入SMS广播的消息。

Go SMS必须以某种方式注销我的应用程序的广播接收器,因为传入的SMS广播不能被中止。 我的意图filter设置为android:priority =“0”。

有什么想法吗?

我的意图filter设置为android:priority =“0”。

这是可能的最低优先级。 所有其他应用程序将首先得到他们的机会之前,它提到你。 引用文档 :

它控制广播接收机执行接收广播消息的顺序。 具有较高优先级值的那些在较低值之前被调用。 (该顺序仅适用于同步消息;对于asynchronous消息,该顺序被忽略。)

所以,他们只是调用abortBroadcast() 。 他们可能会把他们的优先权顶到屋顶上。

GoSMS的优先级设置为2147483647,但不是“最大”(它是最大的整数) – 它太高了。 Android文档SYSTEM_HIGH_PRIORITY是1000(http://developer.android.com/reference/android/content/IntentFilter.html#SYSTEM_HIGH_PRIORITY)和应用程序优先级应低于此; – 它不是一个系统应用程序。

这会造成不可预知的行为。 (GoSMS并不总是closures其他的应用程序通知 – abortBroadcast只有在第一次得到它的时候才会起作用,通常是基于安装顺序,但并不总是这样。)系统级应用程序将会执行,然后Android会尝试整理非系统应用程序。 如果您查看源代码,执行顺序基于优先级别,但对于超过999的应用程序或具有相同优先级别的应用程序,select应用程序顺序的调用不一致。 这可能是按照安装的顺序,但系统更改可能会导致其他的执行顺序(我已经多次看到这个testing)。

这应该由GoSMS(和许多其他有错误的应用程序)来解决。 只是因为“优先级”是一个整数,并不意味着整数的最高值使得最高优先级。 (就像一个url是一个string,但并不是所有的string值都是有效的。)另外,GoSMS应该知道其他应用程序可能想要处理用户不可见的SMS消息。 如果他们捕获并显示给用户,这是毫无意义的。

我认为我们做了一个修复,它工作:)我们通过代码启动广播接收器

 IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); filter.setPriority(2147483647); receiver = new SmsAnalizer(); ac.registerReceiver(receiver, filter); 

这工作,我们完成工作。

下载apktool http://code.google.com/p/android-apktool/

下载自动签署创buildDave Da illest 1 http://www.mediafire.com/?j9n7o6ub9urkfwy

在文件夹中已经提取了apktool和NICEBUTWRONGLYWRITTEN.APK在cmd中运行cmd apktool d -d NICEBUTWRONGLYWRITTEN.APK modif1等待进入dir modif1find第一个可见的XML文件,在此值内查找V = 2147483647(search编号2147483647)将其replace为1 close文件保存。 在cmd窗口中运行apktool b -d modif1 / newsmsapp.apk等到构build完成

采用signapk将builded newsmsapp.apkjoin到目录中,粘贴到那里运行cmd cd到signapktypes的目录:sign newsmsapp.apk

在手机上安装newsmsapp.apk

完成。

Go SMS Pro的优先级最高为2147483647(2 ^ 31-1)。 你也可以设置这个值。 如果优先级相同的Android操作系统将服务“老”的应用程序,你已经安装的第一个。 我从我的经历这样说,我没有谷歌在这个问题上说。