From 4bfb6105f5b7c3bef08b72ea98429d0fd11b7f3e Mon Sep 17 00:00:00 2001 From: Mark Harman Date: Fri, 29 Dec 2023 22:54:17 +0000 Subject: [PATCH] Need to specify RECEIVER_NOT_EXPORTED for Android 14. --- .../remotecontrol/BluetoothRemoteControl.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothRemoteControl.java b/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothRemoteControl.java index e6d4a026..0dc34c2a 100644 --- a/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothRemoteControl.java +++ b/app/src/main/java/net/sourceforge/opencamera/remotecontrol/BluetoothRemoteControl.java @@ -1,5 +1,7 @@ package net.sourceforge.opencamera.remotecontrol; +import static android.content.Context.RECEIVER_NOT_EXPORTED; + import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -261,7 +263,16 @@ public class BluetoothRemoteControl { if( MyDebug.LOG ) Log.d(TAG, "Remote enabled, starting service"); main_activity.bindService(gattServiceIntent, mServiceConnection, Context.BIND_AUTO_CREATE); - main_activity.registerReceiver(remoteControlCommandReceiver, makeRemoteCommandIntentFilter()); + // For Android 14 (UPSIDE_DOWN_CAKE) onwards, a flag of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED must be specified when using + // registerReceiver with non-system intents, otherwise a SecurityException will be thrown. + // The if condition is for TIRAMISU as there seems no harm doing this for earlier versions too, but RECEIVER_NOT_EXPORTED + // requires Android 13. + if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ) { + main_activity.registerReceiver(remoteControlCommandReceiver, makeRemoteCommandIntentFilter(), RECEIVER_NOT_EXPORTED); + } + else { + main_activity.registerReceiver(remoteControlCommandReceiver, makeRemoteCommandIntentFilter()); + } } else { if( MyDebug.LOG )