0

我已经实现了一个 SMS 接收器,它可以毫无问题地拦截传入的 SMS 消息。但是,当我安装 GO SMS Pro 并设置“禁用其他消息通知”时,即使我将意图过滤器的优先级设置得非常高,我的应用程序也不会收到任何广播消息。有没有办法克服让我的应用程序始终接收短信广播,而不管用户在 Go SMS Pro 的应用程序上做什么,特别是因为我的应用程序没有显示任何 UI 弹出通知?一旦我卸载 GO SMS Pro,我的应用程序就会开始接收传入的 SMS 广播并且工作正常。

这是收到传入 SMS 并安装 GO SMS Pro 时的日志。GO SMS Pro 做了一些我不明白的魔法。有人能解释一下这里做了什么吗?我怎样才能确保我的应用每次都收到订购的广播通知。

4

2 回答 2

1

在广播接收器声明的清单中添加以下代码

<receiver
        android:name="com.application.reciever.SMSReceiver"
        class="com.application.reciever.SMSReceiver" android:exported="true">
     <intent-filter android:priority="999" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
</receiver>

“该值必须是整数,例如“100”。数字越大,优先级越高。”

希望它会帮助你。

于 2013-08-06T09:28:18.587 回答
0

GO SMS已将其设置为绝对最大值2147483647 (2^31-1)。因此,如果您将其设置为相同的优先级,那么在这种情况下,Android 操作系统会将广播传递给较旧的应用程序,即(第一个安装的应用程序)会收到通知。如果在您的应用程序之前安装了 Go SMS Pro,您应该警告您的用户这种情况。他们可以对 Go SMS Pro 进行不同的配置或将其卸载,然后重新安装,这样您的应用程序也可以运行。

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

然后在 SMSReceiver onReceive()中,您需要添加abortBroadcast()以中止任何进一步的广播

public void onReceive(Context context, Intent intent) {
  abortBroadcast();
}
于 2013-08-06T09:46:24.537 回答