From 5297f5a7724ebeb6a8bcbf5f43066ee2e9a10347 Mon Sep 17 00:00:00 2001
From: Craig Chandler <[EMAIL REDACTED]>
Date: Tue, 7 Apr 2026 11:02:35 +0930
Subject: [PATCH] Android: use RECEIVER_NOT_EXPORTED for receivers on API 33+
(cherry picked from commit 88017f5023b2ef937c25c294c1e8cafe56dc8c90)
---
.../main/java/org/libsdl/app/HIDDeviceManager.java | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java b/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
index 21a1c1d18eea5..116c4e528eeec 100644
--- a/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
+++ b/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
@@ -193,7 +193,7 @@ private void initializeUSB() {
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
filter.addAction(HIDDeviceManager.ACTION_USB_PERMISSION);
- mContext.registerReceiver(mUsbBroadcast, filter);
+ registerReceiverCompat(mUsbBroadcast, filter);
for (UsbDevice usbDevice : mUsbManager.getDeviceList().values()) {
handleUsbDeviceAttached(usbDevice);
@@ -404,7 +404,7 @@ private void initializeBluetooth() {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
- mContext.registerReceiver(mBluetoothBroadcast, filter);
+ registerReceiverCompat(mBluetoothBroadcast, filter);
if (mIsChromebook) {
mHandler = new Handler(Looper.getMainLooper());
@@ -428,6 +428,14 @@ private void shutdownBluetooth() {
}
}
+ private void registerReceiverCompat(BroadcastReceiver receiver, IntentFilter filter) {
+ if (Build.VERSION.SDK_INT >= 33) {
+ mContext.registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED);
+ } else {
+ mContext.registerReceiver(receiver, filter);
+ }
+ }
+
// Chromebooks do not pass along ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED properly.
// This function provides a sort of dummy version of that, watching for changes in the
// connected devices and attempting to add controllers as things change.