microg/GmsCore · error · RequestHandlingException

NOT_SUPPORTED_ERR

NOT_SUPPORTED_ERR

Error message

BluetoothAdapter null

What it means

Environment guard in HybridClientScan.startScanning: BluetoothAdapter.getDefaultAdapter() returned null, meaning the device has no Bluetooth hardware (or it is unavailable), so BLE scanning for hybrid security keys cannot start.

Source

Thrown at play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/ble/HybridClientScan.kt:72

        }
        Log.d(TAG, "Target device with EID: ${serviceData.joinToString("") { "%02x".format(it) }}")
        if (CryptoHelper.decryptEid(serviceData, seed) == null) {
            Log.d(TAG, "EID verification failed, not matching current session, continuing scan")
            return
        }
        stopScanning()
        onScanSuccess(serviceData)
    }

    override fun onScanFailed(errorCode: Int) {
        onScanFailed(RequestHandlingException(ErrorCode.UNKNOWN_ERR, "BLE scan failed: $errorCode"))
    }

    @SuppressLint("MissingPermission")
    fun startScanning() {
        if (scanStatus.compareAndSet(false, true)) {
            try {
                val adapter = bluetoothLeAdapter ?: throw RequestHandlingException(ErrorCode.NOT_SUPPORTED_ERR, "BluetoothAdapter null")
                if (!adapter.isEnabled) {
                    val enabled = adapter.enable()
                    if (!enabled) {
                        throw RequestHandlingException(ErrorCode.NOT_SUPPORTED_ERR, "Unable to enable Bluetooth")
                    }
                }
                val scanner = adapter.bluetoothLeScanner ?: throw RequestHandlingException(ErrorCode.NOT_SUPPORTED_ERR, "BluetoothLeScanner null")

                val filters = listOf(
                    ScanFilter.Builder().setServiceData(UUID_ANDROID, EMPTY_SERVICE_DATA, EMPTY_SERVICE_DATA_MASK).build(),
                    ScanFilter.Builder().setServiceData(UUID_IOS, EMPTY_SERVICE_DATA, EMPTY_SERVICE_DATA_MASK).build()
                )
                val settings = ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build()
                scanner.startScan(filters, settings, this)
                Log.d(TAG, "BLE scanning started")
            } catch (t: Throwable) {
                onScanFailed(RequestHandlingException(ErrorCode.UNKNOWN_ERR, "startScan failed: ${t.message}"))
            }

View on GitHub (pinned to 157c9d86ac)

Solutions

  1. Check for Bluetooth hardware before starting hybrid flows and offer USB/NFC alternatives
  2. Report an error to the user that BLE is unavailable on this device
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/ble/HybridClientScan.kt:72 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of microg/GmsCore@157c9d86ac (2026-09-06). Data as JSON: /api/errors/1242ba6f46c3b7f9. Report an issue: GitHub.