One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
回答 2
浏览 6104
2023-10-05
在tuya的lib com.thingclips.smart中有1个错误,One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts,但我无法修复它。这是版本 5.1.0 。 我在 Android 14 运行时遇到了这个问题。你能帮我吗?
+我找到了最新版本5.1.0,但它没有解决问题。 + Tuya库在 Android 14 上也没有提及这一点。
2 个回答
#1楼
已采纳
得票数 16
正如 Google I/O 2023 上所讨论的,使用 RECEIVER_EXPORTED / RECEIVER_NOT_EXPORTED 标志有意注册接收器是作为 Android 13 的一部分引入的,现在是在 Android 14 或更高版本 (U+) 上运行的应用的要求。
如果不实现这一点,系统将抛出安全异常。
要允许广播接收器接收来自其他应用程序的广播,请使用以下代码注册接收器:
context.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_EXPORTED);
要注册不接收来自其他应用程序(包括系统应用程序)的广播的广播接收器,请使用以下代码注册接收器:
context.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED);
注意:该调用需要 minSdkVersion 至少为 26 (Android 8)
让我对您的答案添加一点补充:为了避免 API 26 限制,您可以使用 ContextCompat.registerReceiver(context, br, filter, receiveFlags)。更多详细信息请参见: developer.android.com/guide/components/…
- DmitryKanunnikoff 2023-10-24
我正在使用 LocalBroadcastManager.getInstance(getContext()).registerReceiver(eventsReceiver,filter);并且它没有要传递的标志。包 androidx.localbroadcastmanager.content;
- sejn 2023-10-26
#2楼
得票数 0
还可以添加SDK版本检查
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(broadcastReceiver, intentFilter, RECEIVER_EXPORTED)
}else {
registerReceiver(broadcastReceiver, intentFilter)
}