即使设置了最高优先级并安装了第一个,也不会得到短信

Go SMS安装后,我的应用程序不会收到短信。 我设置了最高优先级,并尝试在安装Go SMS应用程序之前安装我的应用程序。 但是,Go SMS在我之前总是得到SMS。 (第一个应用程序安装的概念不适用于我的手机。)

我很好奇Go的开发人员在做什么。 他们的应用程序如何在我之前总是拦截SMS?

我的应用程序工作正常,没有Go SMS。 无论如何,这是我的清单。 也许我做错了什么。

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.ansmsreceiver" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.test.ansmsreceiver.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.test.ansmsreceiver.SMSReceiver" > <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.provider.Telephony.NEW_OUTGOING_SMS" /> </intent-filter> </receiver> </application> 

我发现了与我的问题有关的其他问题 ,但仍找不到解决问题的方法。

编辑:我的testing项目在Github上: https : //github.com/entryleveldev/ansmsreceiver 。

Edit2:仍然不知道android如何决定哪个接收者首先得到意图。 从我testing过的,Go SMS总是有意向的。 UID和安装顺序无关紧要。 但是当我testing我的应用程序和Handcent SMS时,安装顺序很重要。 也许Go SMS使用某种黑客的方式来做到这一点。

这里是Go SMS清单中的SmsReceiver。

 <receiver android:name=".smspopup.SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.GSM_SMS_RECEIVED"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> <intent-filter > <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED"></action> <data android:mimeType="application/vnd.wap.mms-message"></data> </intent-filter> <intent-filter > <action android:name="com.android.mms.transaction.MESSAGE_SENT"></action> </intent-filter> </receiver> 

他们的默认设置是禁用其他消息通知(abortBroadcast)。 这对我来说真的很糟糕。

Solutions Collecting From Web of "即使设置了最高优先级并安装了第一个,也不会得到短信"

我面临同样的问题。

根据Android的文档,最高优先级必须是1000 http://developer.android.com/reference/android/content/IntentFilter.html#SYSTEM_HIGH_PRIORITY

但是这个应用程序正在使用更高的优先级来回避这些指导方针

http://forum.avast.com/offline/forum.theftaware.com/viewtopic5dcd.html

不要变邪恶你最好按照指导方针。

干杯

正如你所链接的问题所解释的,一旦GO SMS应用程序的接收器被调用,他们可以调用abortBroadcast() 。 假设他们正在使用最高优先级(= 2147483647),我会假设文档中的以下片段将适用:

运行的订单接收者可以用匹配意图filter的android:priority属性来控制; 具有相同优先级的接收器将以任意顺序运行。

不过,因为他们总是碰巧在你的应用程序之前拦截短信,所以我会认为魔术是在别的地方。 他们的权限包括以下内容:

  • “android.permission.PERSISTENT_ACTIVITY”
  • “android.permission.WRITE_SMS”
  • “android.permission.READ_SMS”

你介意尝试这些的组合,看看它是否影响意图解决的顺序?