android.content.ReceiverCallNotAllowedException: BroadcastRe


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)

在我的应用程序中,我们正在使用短信检索API自动读取OTP,我们正在注册广播接收器一旦触发短信API获得成功响应。它是按预期工作,但当我们检查Firebase崩溃分析和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