如何解决android.content.ReceiverCallNotAllowedException:不允许 BroadcastReceiver 组件注册接收意图
Fatal Exception: android.content.ReceiverCallNotAllowedException: BroadcastReceiver components are not allowed to register to receive intents
at android.app.ReceiverRestrictedContext.registerReceiver(ReceiverRestrictedContext.java:141)
at android.app.ReceiverRestrictedContext.registerReceiver(ReceiverRestrictedContext.java:130)
at xxxxx.z$d.invoke(z.java:10)
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(ThreadsKt.java:2)
在我的应用程序中,我们使用 SMS Retrieval API 进行自动读取 OTP,一旦触发 sms api 获得成功响应,我们就会注册广播接收器。它按预期工作,但是当我们检查 Firebase Crashlytics 和 google play 控制台报告为致命异常(崩溃)时,在某些情况下会出现上述堆栈跟踪。我们无法理解确切的根本原因是什么,也不确定是我们的广播接收器还是其他原因,并且日志中没有显示任何与我们的代码参考相关的内容。
供您参考以下用于注册广播接收器的片段
val intentFilter = IntentFilter()
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION)
activity.applicationContext.registerReceiver(this,intentFilter)
val client = SmsRetriever.getClient(activity.applicationContext)
client.startSmsRetriever()
提前致谢。
解决方法
LocalBroadcastManager
方法注册接收器或向与发送器位于同一应用中的接收器发送广播
注册接收者:
LocalBroadcastManager.getInstance(context)
.registerReceiver(mReceiver,new IntentFilter(ACTION_CUSTOM_BROADCAST));
发送广播:
LocalBroadcastManager.getInstance(context)
.sendBroadcast(new IntentFilter(ACTION_CUSTOM_BROADCAST));
来源: https://developer.android.com/guide/components/broadcasts#sending-broadcasts
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。