From a93422d3ed3fedda655ffaa9386464fab11ca058 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 18 Jun 2022 14:31:38 -0500 Subject: [PATCH] Handle failure to bind com.nvidia.blakepairing more robustly --- .../shield/ShieldControllerExtensionsHandler.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/input/shield/ShieldControllerExtensionsHandler.java b/app/src/main/java/com/limelight/binding/input/shield/ShieldControllerExtensionsHandler.java index 5bd7d30f..45248355 100644 --- a/app/src/main/java/com/limelight/binding/input/shield/ShieldControllerExtensionsHandler.java +++ b/app/src/main/java/com/limelight/binding/input/shield/ShieldControllerExtensionsHandler.java @@ -92,8 +92,15 @@ public class ShieldControllerExtensionsHandler implements InputManager.InputDevi Intent intent = new Intent(); intent.setClassName("com.nvidia.blakepairing", "com.nvidia.blakepairing.AccessoryService"); - if (!context.bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE)) { - LimeLog.info("com.nvidia.blakepairing.AccessoryService is not available on this device"); + try { + // The docs say to call unbindService() even if the bindService() call returns false + // or throws a SecurityException. + if (!context.bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE)) { + LimeLog.info("com.nvidia.blakepairing.AccessoryService is not available on this device"); + context.unbindService(serviceConnection); + } + } catch (SecurityException e) { + context.unbindService(serviceConnection); } }