@@ -138,7 +138,11 @@ class FlutterBlePeripheralPlugin : FlutterPlugin, MethodChannel.MethodCallHandle
138138 private fun enableBluetooth (call : MethodCall , result : MethodChannel .Result ) {
139139 if (activityBinding != null ) {
140140 val isEnabled = flutterBlePeripheralManager!! .checkAndEnableBluetooth(call.arguments as Boolean , result, activityBinding!! )
141- result.success(isEnabled)
141+ // if the bluetooth is already enabled, respond immediately
142+ // If not, Activity Result will respond later
143+ if (isEnabled) {
144+ result.success(true )
145+ }
142146 } else {
143147 result.error(" No activity" , " FlutterBlePeripheral is not correctly initialized" , " null" )
144148 }
@@ -372,21 +376,45 @@ class FlutterBlePeripheralPlugin : FlutterPlugin, MethodChannel.MethodCallHandle
372376 binding.addActivityResultListener { requestCode, resultCode, _ ->
373377 when (requestCode) {
374378 FlutterBlePeripheralManager .REQUEST_ENABLE_BT -> {
375- if (flutterBlePeripheralManager?.pendingResultForActivityResult != null ) {
376- startStopCall = null
377- flutterBlePeripheralManager!! .pendingResultForActivityResult!! .success(resultCode == Activity .RESULT_OK )
378- } else if (flutterBlePeripheralManager?.pendingResultForPermissionResult != null ) {
379- if (resultCode == Activity .RESULT_OK ) {
380- if (startStopCall != null ) {
381- onMethodCall(startStopCall!! , flutterBlePeripheralManager!! .pendingResultForPermissionResult!! )
382- startStopCall = null
383- flutterBlePeripheralManager?.pendingResultForPermissionResult = null
379+ try {
380+ // Handle direct Bluetooth activation request (priority 1)
381+ if (flutterBlePeripheralManager?.pendingResultForActivityResult != null ) {
382+ flutterBlePeripheralManager!! .pendingResultForActivityResult!! .success(resultCode == Activity .RESULT_OK )
383+ flutterBlePeripheralManager!! .pendingResultForActivityResult = null
384+ }
385+ // Handle Bluetooth activation request during permission check (priority 2)
386+ else if (flutterBlePeripheralManager?.pendingResultForPermissionResult != null ) {
387+ val manager = flutterBlePeripheralManager!!
388+ if (resultCode == Activity .RESULT_OK ) {
389+ // Execute delayed method call when Bluetooth activation succeeds
390+ if (startStopCall != null ) {
391+ onMethodCall(startStopCall!! , manager.pendingResultForPermissionResult!! )
392+ startStopCall = null
393+ } else {
394+ // Success response for simple Bluetooth activation request
395+ manager.pendingResultForPermissionResult!! .success(true )
396+ }
397+ } else {
398+ // When user denies Bluetooth activation
399+ manager.pendingResultForPermissionResult!! .success(false )
384400 }
385- } else {
386- flutterBlePeripheralManager?.pendingResultForPermissionResult?.success(State .TurnedOff .ordinal)
401+ manager.pendingResultForPermissionResult = null
387402 }
403+ } catch (e: Exception ) {
404+ Log .e(tag, " Error handling Bluetooth enable result: ${e.message} " )
405+ // In case of any exception, ensure all pending results are handled.
406+ try {
407+ flutterBlePeripheralManager?.pendingResultForActivityResult?.success(false )
408+ } catch (ignored: Exception ) {}
409+ try {
410+ flutterBlePeripheralManager?.pendingResultForPermissionResult?.success(false )
411+ } catch (ignored: Exception ) {}
412+
413+ // Clear all pending results
414+ flutterBlePeripheralManager?.pendingResultForActivityResult = null
415+ flutterBlePeripheralManager?.pendingResultForPermissionResult = null
416+ startStopCall = null
388417 }
389- flutterBlePeripheralManager?.pendingResultForActivityResult = null
390418 return @addActivityResultListener true
391419 }
392420 else -> return @addActivityResultListener false
0 commit comments