我刚刚收到环聊 2.0 的更新,安装并启用SMS
→ Turn on SMS
。现在我的应用程序,在 Android 4.3 下运行,无法再接收 SMS,即我的 BroadcastReceiverSMS_RECEIVED
不再被调用。:-(
一旦我Turn on SMS
在环聊 2.0 中禁用,我的应用就能够再次接收 SMS_RECEIVED 意图。
广播接收器像这样在清单中注册
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,这是意图过滤器文档中可能的最高优先级,但没有成功。我知道SMS_RECEIVED
意图是按顺序发送的,并且高优先级的应用程序能够中止广播。1但是环聊 2.0 似乎不太可能注册SMS_RECEIVED
具有高优先级的接收者并调用abortBroadcast()
,因此阻止任何其他应用程序接收意图。
更让我感到困惑的是,我的 Pebble 仍然能够接收短信,即使将 Hangouts 2.0 作为默认短信应用程序也是如此。我想知道 Pebble 有什么不同?我刚刚注意到我的 Pebble 上的传入 SMS 通知不再是 Pebble 应用程序接收到的新 SMS 通知,而是由环聊接收传入 SMS 引起的“新环聊消息”通知。因此,Pebble 应用程序也无法接收带有SMS_RECEIVED
.
顺便说一句,与这个问题没有真正的关系,因为我仍然在 Android 4.3 上(但我的应用程序针对 SDK 级别 19,Android 4.4 以防万一)谷歌的 Android 开发人员博客文章关于Kitkat 中的新 SMS API,说仅使用 SMS_RECEIVED 的应用程序不会有任何改变,并且不要尝试将 SMS 写入 SMS Provider。
1我一直认为 SMS_RECEIVED 广播是可以中止的。但是Android 4.4 APIs 网站说的有些不同:“……当一条新的 SMS 通过侦听 SMS_RECEIVED_ACTION 广播到达时,这是一个不可中止的广播……”