From 24fc125753eb4d81f545390d5be523a9c67021ba Mon Sep 17 00:00:00 2001 From: Mitch Goldenberg Date: Mon, 6 Oct 2025 19:29:18 -0400 Subject: [PATCH] Fix Android 11-14 deprecation warnings (Handler, BroadcastReceiver) - Replace deprecated Handler() with Handler(Looper.getMainLooper()) for Android 11+ compatibility - Add RECEIVER_NOT_EXPORTED flag for BroadcastReceiver on Android 13+ - All changes are backwards compatible to API 18 Tested on Android 8-14 with BT5-A hardware. Fixes deprecation warnings that may cause issues in future Android versions. --- .../src/com/inputstick/api/bluetooth/BTService.java | 9 +++++++-- .../src/com/inputstick/api/init/BasicInitManager.java | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/InputStickAPI/src/com/inputstick/api/bluetooth/BTService.java b/InputStickAPI/src/com/inputstick/api/bluetooth/BTService.java index 9959e3d..0fa96e9 100644 --- a/InputStickAPI/src/com/inputstick/api/bluetooth/BTService.java +++ b/InputStickAPI/src/com/inputstick/api/bluetooth/BTService.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.Handler; +import android.os.Looper; import android.os.Message; import com.inputstick.api.InputStickError; @@ -45,7 +46,7 @@ public class BTService { private boolean turnBluetoothOn; private boolean receiverRegistered; - private Handler mDelayHandler = new Handler(); + private Handler mDelayHandler = new Handler(Looper.getMainLooper()); private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -147,7 +148,11 @@ public synchronized void connect(String mac, boolean doNotAsk, boolean bt40) { turnBluetoothOn = true; if ( !receiverRegistered) { IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); - mCtx.registerReceiver(mReceiver, filter); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) { + mCtx.registerReceiver(mReceiver, filter, Context.RECEIVER_NOT_EXPORTED); + } else { + mCtx.registerReceiver(mReceiver, filter); + } receiverRegistered = true; } diff --git a/InputStickAPI/src/com/inputstick/api/init/BasicInitManager.java b/InputStickAPI/src/com/inputstick/api/init/BasicInitManager.java index de835f1..b164cff 100644 --- a/InputStickAPI/src/com/inputstick/api/init/BasicInitManager.java +++ b/InputStickAPI/src/com/inputstick/api/init/BasicInitManager.java @@ -1,6 +1,7 @@ package com.inputstick.api.init; import android.os.Handler; +import android.os.Looper; import com.inputstick.api.InputStickError; import com.inputstick.api.Packet; @@ -26,7 +27,7 @@ public void onConnected() { initDone = false; sendPacket(new Packet(true, Packet.CMD_RUN_FW)); - handler = new Handler(); + handler = new Handler(Looper.getMainLooper()); handler.postDelayed(new Runnable() { @Override public void run() {