huitingyeong / bluetooth_enable

MIT License
1 stars 32 forks source link

Crash on Android 12 if permission is not granted #12

Open itsJoKr opened 2 years ago

itsJoKr commented 2 years ago

When I call BluetoothEnable.enableBluetooth == 'true' it will cause a crash in native app if I don't have enabled permissions.

Preferred way would be to catch and notify Flutter side that there is an error.

E/MethodChannel#bluetooth_enable(31877): java.lang.SecurityException: Permission Denial: starting Intent { act=android.bluetooth.adapter.action.REQUEST_ENABLE cmp=com.android.settings/.bluetooth.RequestPermissionActivity } from ProcessRecord{ba32fb4 31877:com.cyklaer.connect.staging/u0a327} (pid=31877, uid=10327) requires android.permission.BLUETOOTH_CONNECT
E/MethodChannel#bluetooth_enable(31877):    at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Parcel.createException(Parcel.java:2410)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Parcel.readException(Parcel.java:2393)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Parcel.readException(Parcel.java:2335)
E/MethodChannel#bluetooth_enable(31877):    at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:2328)
E/MethodChannel#bluetooth_enable(31877):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1758)
E/MethodChannel#bluetooth_enable(31877):    at android.app.Activity.startActivityForResult(Activity.java:5410)
E/MethodChannel#bluetooth_enable(31877):    at android.app.Activity.startActivityForResult(Activity.java:5368)
E/MethodChannel#bluetooth_enable(31877):    at com.hui.bluetooth_enable.BluetoothEnablePlugin.onMethodCall(BluetoothEnablePlugin.java:69)
E/MethodChannel#bluetooth_enable(31877):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
E/MethodChannel#bluetooth_enable(31877):    at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/MethodChannel#bluetooth_enable(31877):    at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$DartMessenger(DartMessenger.java:319)
E/MethodChannel#bluetooth_enable(31877):    at io.flutter.embedding.engine.dart.-$$Lambda$DartMessenger$TsixYUB5E6FpKhMtCSQVHKE89gQ.run(Unknown Source:12)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Handler.handleCallback(Handler.java:938)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Looper.loopOnce(Looper.java:201)
E/MethodChannel#bluetooth_enable(31877):    at android.os.Looper.loop(Looper.java:288)
E/MethodChannel#bluetooth_enable(31877):    at android.app.ActivityThread.main(ActivityThread.java:7870)
E/MethodChannel#bluetooth_enable(31877):    at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#bluetooth_enable(31877):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/MethodChannel#bluetooth_enable(31877):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
E/MethodChannel#bluetooth_enable(31877): Caused by: android.os.RemoteException: Remote stack trace:
E/MethodChannel#bluetooth_enable(31877):    at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission(ActivityTaskSupervisor.java:1059)
E/MethodChannel#bluetooth_enable(31877):    at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:983)
E/MethodChannel#bluetooth_enable(31877):    at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:672)
E/MethodChannel#bluetooth_enable(31877):    at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1243)
E/MethodChannel#bluetooth_enable(31877):    at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1215)
E/MethodChannel#bluetooth_enable(31877): 
D/CompatibilityChangeReporter(31877): Compat change id reported: 78294732; UID 10327; state: DISABLED
D/BluetoothEnablePlugin(31877): User did NOT enabled Bluetooth
I/System.out(31877): User did NOT enabled Bluetooth
D/AndroidRuntime(31877): Shutting down VM
E/AndroidRuntime(31877): FATAL EXCEPTION: main
E/AndroidRuntime(31877): Process: com.cyklaer.connect.staging, PID: 31877
E/AndroidRuntime(31877): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=null} to activity {com.cyklaer.connect.staging/porsche.digital.cyklear.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void io.flutter.plugin.common.MethodChannel$Result.success(java.lang.Object)' on a null object reference
E/AndroidRuntime(31877):    at android.app.ActivityThread.deliverResults(ActivityThread.java:5368)
E/AndroidRuntime(31877):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:5407)
E/AndroidRuntime(31877):    at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:67)
E/AndroidRuntime(31877):    at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
E/AndroidRuntime(31877):    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
E/AndroidRuntime(31877):    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
E/AndroidRuntime(31877):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)
E/AndroidRuntime(31877):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime(31877):    at android.os.Looper.loopOnce(Looper.java:201)
E/AndroidRuntime(31877):    at android.os.Looper.loop(Looper.java:288)
E/AndroidRuntime(31877):    at android.app.ActivityThread.main(ActivityThread.java:7870)
E/AndroidRuntime(31877):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(31877):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/AndroidRuntime(31877):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
E/AndroidRuntime(31877): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void io.flutter.plugin.common.MethodChannel$Result.success(java.lang.Object)' on a null object reference
E/AndroidRuntime(31877):    at com.hui.bluetooth_enable.BluetoothEnablePlugin.onActivityResult(BluetoothEnablePlugin.java:111)
E/AndroidRuntime(31877):    at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEngineConnectionRegistry.java:805)
E/AndroidRuntime(31877):    at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onActivityResult(FlutterEngineConnectionRegistry.java:428)
E/AndroidRuntime(31877):    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:802)
E/AndroidRuntime(31877):    at io.flutter.embedding.android.FlutterActivity.onActivityResult(FlutterActivity.java:724)
E/AndroidRuntime(31877):    at android.app.Activity.dispatchActivityResult(Activity.java:8388)
E/AndroidRuntime(31877):    at android.app.ActivityThread.deliverResults(ActivityThread.java:5361)
E/AndroidRuntime(31877):    ... 13 more
amigax commented 1 year ago

how did you fix that?