【发布时间】:2016-06-28 11:08:52
【问题描述】:
在查看了几个资源和问题后,我仍然面临检测传入 SMS 消息的问题。
下面的代码显示了基础知识:
在接收时显示 toast 的广播接收器类
public class IncomingSms extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "something received", Toast.LENGTH_SHORT).show();
}
}
带有注册接收者和权限的简单清单
<application
<receiver
android:name=".IncomingSms"
android:permission="android.permission.BROADCAST_SMS"
android:exported="true">
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
上面的代码声明并注册了接收者,并拥有适当的权限。此外,优先级设置为 MAX_INT,即 2147483647。
我的设备是 Nexus 6P,安装了默认的 Messenger 应用(我也尝试过环聊)。该应用程序仍然没有显示我的祝酒词。在旧款三星设备上试用后,吐司打印正确。
优先级问题
我在 6P 上安装了一个名为 Manifest Viewer 的应用程序,它允许我查看安装在我的设备上的应用程序的 manifest.xml。我检查了 Messenger 和 Hangouts 的清单,以获取 SMS 标签的接收者,发现它们都指定了 2147483647 的优先级。似乎这两个 Messenger 应用程序的优先级都达到了最大值,一旦它们消费了消息,它们不允许其他应用程序干预。请注意,这些是现有的 Google 应用,而不是第 3 方。
在这一点上,我很困惑:
- 他们为什么要这样做?
- 如何绕过它?
非常感谢
【问题讨论】:
标签: android broadcastreceiver sms android-permissions