即使设置了最高优先级并首先安装,也不会获取短信

时间:2013-06-05 16:17:53

标签: android android-intent

安装Go SMS时,我的应用程序未收到短信。我设置了最高优先级,并在安装Go SMS应用程序之前尝试安装我的应用程序。但是,Go 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>

我发现其他questions与我的问题有关,但仍无法找到修复方法。

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

Edit2:仍然不确定android如何决定哪个接收者首先获得意图。根据我的测试,Go SMS总是得到意图。 UID和安装顺序无关紧要。 但是当我测试我的应用程序和Handcent SMS时,安装顺序很重要。也许Go SMS使用某种hacky方式来做到这一点。

这是Go短信清单中的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)。这对我来说真的很糟糕。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。

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

但是这个应用程序使用更高的优先级来规避指南。

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

不要生病您最好遵循指南。

干杯

答案 1 :(得分:0)

正如您要链接的问题所解释的那样,一旦GO短信应用的接收器被呼叫,他们就可以呼叫abortBroadcast()。假设他们使用可能的最高优先级(= 2147483647),我会假设docs中的以下代码段适用:

  

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

然而,由于他们总是碰巧在你的应用程序之前拦截短信,我会认为魔术是在其他地方。 在他们的权限中,他们有以下内容:

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

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

相关问题