pt2*_*121 8 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>
Run Code Online (Sandbox Code Playgroud)
我发现了与我的问题有关的其他问题,但仍无法找到解决问题的方法.
编辑:我的测试项目在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>
Run Code Online (Sandbox Code Playgroud)
它们的默认设置是禁用其他消息通知(abortBroadcast).这对我来说真的很糟糕.
正如您链接到的问题所解释的,一旦 GO SMS 应用程序的接收者被呼叫,他们就可以呼叫abortBroadcast()。假设他们使用可能的最高优先级(=2147483647),我假设文档中的以下代码片段适用:
接收器运行的顺序可以通过匹配意图过滤器的 android:priority 属性来控制;具有相同优先级的接收器将以任意顺序运行。
然而,由于它们总是碰巧在您的应用程序之前拦截短信,我认为魔法在其他地方。他们的权限包括:
您介意尝试将这些组合起来,看看它是否会影响意图解析的顺序?
| 归档时间: |
|
| 查看次数: |
3071 次 |
| 最近记录: |