【问题标题】:not get sms even when set the highest priority and installed first即使设置最高优先级并首先安装也无法收到短信
【发布时间】:2013-06-05 16:17:52
【问题描述】:

安装 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>

我找到了与我的问题相关的其他 questions,但仍然找不到解决方法。

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

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

这是 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)。这对我来说真的很糟糕。

【问题讨论】:

  • 您是否尝试复制他们的意图过滤器并查看是否有所作为?
  • 嗯,好吧-我自己的应用程序中实际上也有同样的问题,但我只是忍受它;-) 您还像他们一样在接收器上添加了权限标签吗?如果无法覆盖他们的优先级,他们一定是在使用某种 hack 来完成这项工作。
  • 是的,我真的很想知道他们是怎么做到的。
  • 查看我的 logcat 中的这个 pastebin,当我试图从我的应用程序接收短信时:pastebin.com/eExvPwSa 我不完全知道 Go SMS 在那里做什么,但这似乎并不正确的。每次我收到短信时都会出现此日志。对我来说似乎有点 hack。
  • 这对我来说也不合适。也很乱。

标签: android android-intent


【解决方案1】:

我也遇到过同样的问题。

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

但是这个应用程序使用了更高的优先级来规避准则。

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

别作恶你最好遵守准则。

干杯

【讨论】:

  • 将优先级设置为 1000 对您有帮助吗?
  • 太旧了,不确定
【解决方案2】:

正如您链接到的问题所解释的那样,一旦呼叫 GO SMS 应用程序的接收器,他们就可以拨打 abortBroadcast()。假设他们正在使用可能的最高优先级 (=2147483647),我会假设来自 docs 的以下 sn-p 将适用:

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

但是,由于它们总是会在您的应用程序之前拦截 SMS,因此我认为神奇之处在于其他地方。 在他们的权限中,他们拥有以下权限:

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

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

【讨论】:

  • 有见地,我想看看这是怎么回事。
  • 刚刚测试了你的建议。它不起作用。无论如何,谢谢。
  • @EntryLevelDev 你在什么 API 级别上测试它?
猜你喜欢
  • 2012-12-07
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多