致命异常:MQTT 建议:当接收者未独占注册时,应指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED 之一

问题描述 投票:0回答:1

致命异常:MQTT 建议: 当接收器未专门注册用于系统广播时,应指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED 之一

我在从 MQTT 接收数据时遇到致命异常 我已将所有旧代码更改为新代码,其中我传递了 RECEIVER_NOT_EXPORTED 但仍然面临同样的问题。

ContextCompat.registerReceiver(this,mMessageReceiver,
                new IntentFilter(AppConstants.INTENT_FILTERS.DASHBOARD_MESSAGE),
                ContextCompat.RECEIVER_NOT_EXPORTED);

相同的代码在 14 以下版本中运行良好。

有人可以帮我吗?

我尝试在注册广播接收器时传递 RECEIVER_NOT_EXPORTED 但仍然面临同样的问题

android broadcastreceiver mqtt mobile-development android-14
1个回答
0
投票

如果它是一个 Activity,请使用

this
,而不是使用 contextCompat;如果它是一个片段,请使用
requireContext()

然后像这样使用它。

requireContext().registerReceiver(mMessageReceiver,
                new IntentFilter(AppConstants.INTENT_FILTERS.DASHBOARD_MESSAGE),RECEIVER_NOT_EXPORTED);

确保导入正确的。您需要导入上下文。

您甚至可以添加 sdk 检查。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
     requireContext().registerReceiver(mMessageReceiver,
                new IntentFilter(AppConstants.INTENT_FILTERS.DASHBOARD_MESSAGE),RECEIVER_NOT_EXPORTED);
}else {
    requireContext().registerReceiver(mMessageReceiver,
                new IntentFilter(AppConstants.INTENT_FILTERS.DASHBOARD_MESSAGE));
}
© www.soinside.com 2019 - 2024. All rights reserved.