Android 在Hangouts 2.0中启用SMS支持会中断我的应用程序中收到的SMS_的广播接收器

Android 在Hangouts 2.0中启用SMS支持会中断我的应用程序中收到的SMS_的广播接收器,android,sms,hangout,Android,Sms,Hangout,我刚刚收到了Hangouts 2.0的更新,安装并启用了SMS→ 打开短信。现在,我的应用程序在Android 4.3下运行,无法再接收SMS,也就是说,SMS\u RECEIVED的广播接收器不再被调用:-( 只要我在Hangouts 2.0中禁用打开SMS,我的应用程序就可以再次接收SMS\u接收到的意图 广播接收器在清单中的注册方式如下 AndroidManifest.xml … <receiver android:name=".SMSReceiver" > <i

我刚刚收到了Hangouts 2.0的更新,安装并启用了
SMS
→ <代码>打开短信。现在,我的应用程序在Android 4.3下运行,无法再接收SMS,也就是说,
SMS\u RECEIVED
的广播接收器不再被调用:-(

只要我在Hangouts 2.0中禁用
打开SMS
,我的应用程序就可以再次接收SMS\u接收到的意图

广播接收器在清单中的注册方式如下

AndroidManifest.xml

…
<receiver android:name=".SMSReceiver" >
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
…
我已经尝试将接收器的优先级更改为INT_MAX或999,这是唯一的设置,但没有成功。1但Hangouts 2.0似乎不太可能以高优先级注册收到的
SMS_
接收器并进行呼叫,从而阻止任何其他应用程序接收该意图

更让我困惑的是,即使使用Hangouts 2.0作为默认短信应用程序,我的Pebble仍然能够接收短信。我想知道Pebble有什么不同?我只是注意到,我的Pebble上收到的短信通知不再是Pebble应用程序接收到的新短信的通知,而是“新的Hangout消息”由接收到传入短信的挂断引起的通知。因此Pebble应用程序也无法接收到带有
SMS\u RECEIVED
的传入短信

另一方面,由于我仍然使用安卓4.3(但我的应用程序目标是SDK级别19,安卓4.4,以防万一),谷歌的安卓开发者博客发布了一篇关于这一问题的博文,该博文表示,对于只使用收到的短信的应用程序,不会有任何改变,也不要尝试将短信发送给短信提供商


1我一直认为SMS_接收到的广播是可中止的。但它说的是不同的:“…当一条新的SMS通过收听SMS_接收到的行动广播到达时,这是一个不可中止的广播…”

我仍然可以很好地进行广播。我刚刚安装了新的hangouts并启用了SMS。在我的情况下,我只是在读取SMS内容,并继续工作。不过,我所做的是按照以下步骤将intent filter的优先级设置为999:


也许这是在扮演一个角色

更新:
刚刚读到您将目标更改为SDK级别19。在这种情况下,我读到您必须更改应用程序的行为(现在找不到链接)遵循API 19准则。将目标更改回18,它应该可以正常工作。

我也有同样的问题。我的目标是sdk 17,如果启用了Hangouts来处理SMS,我仍然无法获得广播。谁知道市场上有多少应用程序Hangouts刚刚出现

我将尝试调整优先级,看看这是否有帮助

[编辑]
是的,优先级为我在target sdk 17上修复了它。谢谢!

修复了它。

第一个问题是,正如您在中所看到的,我将
priority
属性放在
action
元素中,而实际上它属于
intent filter
元素。因此优先级不起作用

虽然仍以API 19为目标,但我也有过一些关于支持Hangouts SMS和不同优先级的体验

  • 没有设置优先级→ BroadcastReceiver未接收到
    SMS\u已接收
    intent
  • 优先权500→ BroadcastReceiver是否接收
    SMS\u已接收
    intent
  • 优先权9991→ BroadcastReceiver是否接收
    SMS\u已接收
    intent
因此,似乎您需要为优先级设置一个最小值,以便在启用Hangouts SMS的情况下达到目的。我没有费心将最小值平分。;)我选择999,因为我看不到任何降低优先级的理由,因为我的应用程序只对收到的SMS进行一些快速检查,不会进一步处理它。但这确实会有所不同,因为广播是不可中止的


1

根据最新的Google Hangouts清单,他们的AbortSmsReceiver设置了优先级为“3”的设置,因此任何想要接收API 18或更低版本上接收的SMS_广播的应用程序都应该使用高于3的优先级:

<receiver android:name="com.google.android.apps.babel.sms.AbortSmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:enabled="false">
    <intent-filter android:priority="3">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

您可以使用API 19的构建目标。运行API 19(KitKat)的设备上的应用程序将无法像以前的API那样中止广播。这可以防止应用程序执行过早中止

我想他们包括这个中止是为了防止股票消息应用程序发布重复的通知。股票消息应用程序应在KitKat之前以0优先级处理-但任何未设置优先级的应用程序也将以0优先级处理。使用默认优先级值“0”创建IntentFilter对象:

public IntentFilter(){
m优先级=0;
mActions=newarraylist();
}

注册接收器时,将过滤器的优先级设置为INTEGER.MAX\u值。现在abortBroadcast()将起作用

receiver = new HightPrioritySmsReceiver();
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(receiver, filter);

不幸的是,短信广播实际上是无法中止的。你能提供一份支持该声明的参考资料吗?Android文档说它是不可中止的(参见我问题中提供的参考资料)。我也有同样的问题。不同的是,我需要中止广播,因为一些传入的短信只与我的应用程序有关,我不想在短信收件箱中创建垃圾邮件。我将“优先级”更改为“最大值”,并且Hangouts仍会收到已处理的sms。@oracleruiz。基本上,hangout's似乎正在以最大优先级注册接收器,因此,
abortBroadcast()
不起作用,因为在hangout接收到广播意图之前,您无法接收到它。@Flow可以为某些传入的SMS禁用hangout通知?您介意添加更多关于您以前和现在使用的优先级的详细信息吗?我使用了默认优先级,但现在已将其设置为999。我
<receiver android:name="com.google.android.apps.babel.sms.AbortSmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:enabled="false">
    <intent-filter android:priority="3">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
public IntentFilter() {
        mPriority = 0;
        mActions = new ArrayList<String>();
}
receiver = new HightPrioritySmsReceiver();
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(receiver, filter);