【发布时间】:2013-11-30 01:13:37
【问题描述】:
我刚刚收到环聊 2.0 的更新,安装并启用了 SMS → Turn on SMS。现在我的应用程序在 Android 4.3 下运行,无法再接收短信,即我的 SMS_RECEIVED 的 BroadcastReceiver 不再被调用。 :-(
只要我在环聊 2.0 中禁用 Turn on SMS,我的应用就可以再次接收 SMS_RECEIVED 意图。
广播接收器是这样在 Manifest 中注册的
AndroidManifest.xml
…
<receiver android:name=".SMSReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
…
SMSReceiver.java
public class SMSReceiver extends BroadcastReceiver {
private static final Log LOG = Log.getLog();
@Override
public void onReceive(Context context, Intent intent) {
LOG.d("onReceive");
…
}
}
我已经尝试将接收器的优先级更改为 INT_MAX 或 999,即highest possible priority as of the intent-filter documentation,但没有成功。 I know that SMS_RECEIVED intents are send ordered and that high priority apps have the ability to abort the broadcast.1 但环聊 2.0 似乎不太可能以高优先级注册 SMS_RECEIVED 接收者并调用 abortBroadcast(),因此阻止任何其他应用接收意图。
让我更加困惑的是,我的 Pebble 仍然能够接收短信,即使将 Hangouts 2.0 作为默认短信应用程序也是如此。我想知道 Pebble 有什么不同? 我刚刚注意到 Pebble 上的传入 SMS 通知不再是 Pebble 应用收到的新 SMS 通知,而是由以下原因引起的“新环聊消息”通知环聊接收传入的短信。因此,Pebble 应用程序也无法接收带有SMS_RECEIVED 的传入短信。
附带说明,与此问题无关,因为我仍在使用 Android 4.3(但我的应用程序针对 SDK 级别 19,Android 4.4 以防万一)Google 的 Android 开发人员博客文章关于 new SMS API in Kitkat,说仅使用 SMS_RECEIVED 的应用程序不会发生任何变化,并且不要尝试将 SMS 写入 SMS Provider。
1 我一直认为 SMS_RECEIVED 广播是可以中止的。但是Android 4.4 APIs site 说的是不同的:“……当一条新的 SMS 通过侦听 SMS_RECEIVED_ACTION 广播到达时,这是一个不可中止广播……”
【问题讨论】: