Activity.requestPermissions is unreliable from non-UI threads / late
timing on Android 17 (createDeviceContext garbage device id); the
fragment's onAttach request path works. Skip the legacy location
request on API 31+ (BLUETOOTH_SCAN is neverForLocation). Rebuild
Ble.jar.
The register() runnable can run after the activity has saved its
state (e.g. app started in the background), in which case commitNow
throws IllegalStateException and crashes the app. Rebuild Ble.jar.