安卓:短信被ChatON应用程序阻止

3
我已经编写了一个应用程序,可以接收短信、保存短信并将其显示给用户。但是由于三星的ChatOn应用程序更新,我的应用程序突然停止接收短信。

这是我的Manifest.xml文件:

 <uses-permission android:name="android.permission.RECEIVE_SMS" />


 <receiver android:name="com.myapp.sms.service.SMSReceiver"
     android:permission="android.permission.BROADCAST_SMS" android:exported="true">
     <intent-filter android:priority="999">
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
     </intent-filter>
 </receiver>

我之前在使用Hangout应用时遇到了问题,当时Hangout开始支持短信功能,于是我在manifest文件中将优先级设定为999(最大值),这解决了我的问题。

但是最近一次ChatOn应用的更新后,我的应用无法接收短信。请告诉我如何解决这个问题。

为了解决此问题,我在ChatOn应用中取消了短信选项。

感谢任何帮助。


就此而言,“android:priority”的最大值不是999。虽然文档中如此声明,但实际上文档是错误的。最大值应该是Integer.MAX_VALUE的数字,约为20亿。请注意,即使您请求了这个优先级,由于Android使用的任何决胜方法(GoSMS经常引起此问题),其他应用程序仍可能在您之前进入。 - CommonsWare
@CommonsWare,如果您说文档有误,并且我将优先级设置为Integer.MAX_VALUE,那么如果广播被应用程序停止,所有其他应用程序都将停止接收短信。我猜这就是ChatOn正在做的事情。这根本不应该存在。那么正确的解决方案是什么?这个功能对我的应用程序是必需的。 - User12111111
如果应用程序停止广播,那么所有其他应用程序都将停止接收短信。-- 中止有序广播的应用程序会阻止低优先级接收器获取该广播。"我猜这就是ChatOn正在做的事情" -- 这是一种可能性。安装“App Browser”并检查ChatOn的清单。"那么正确的解决方案是什么?"-- 如果高优先级应用程序消耗事件,则您无法执行任何操作,并且无法保证您始终具有最高优先级。 - CommonsWare
@CommonsWare,ChatOn应用程序的优先级设置为2147483647,即使Hangout的优先级也是2147483647。根据经验,Hangout不会中止广播,但看起来ChatOn正在中止广播。因此,最终我将不得不将我的应用程序优先级设置为2147483647。 - User12111111
1个回答

2

在Android 4.3及以下版本中,没有任何保证的方法可以让你的应用程序优先获取短信。即使你将你的应用程序设置为最高优先级,其他应用程序也可以这样做。GoSMS就是这样做的,你已经表明ChatOn也是如此。如果它们先收到消息并中止广播,你将无法接收到消息。

除了检测这种可能性(使用PackageManager)并警告用户潜在行为外,你无能为力。

请注意,在Android 4.4上,情况大不相同

  • 广播现在无法中止
  • 有专门用于监视短信和实际最终短信客户端应用程序的分开广播

感谢您的输入。我需要支持更低版本。 - User12111111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接