在蓝牙扫描期间找不到设备

我试图实现一个蓝牙扫描仪和记录有关设备的信息。 我遇到了两个问题,第一个问题handler.postDelayed似乎无法正常工作,因为它立即执行stopBleScan()方法。 第二个问题map bleScanResults总是长度为0,这意味着扫描器没有发现任何设备。

PS。 我检查所有必要的权限(位置也)。

码:

 class MainActivity : AppCompatActivity(), AnkoLogger { lateinit var deviceBluetoothAdapter: BluetoothAdapter val REQUEST_ENABLE_BT = 1 val REQUEST_FINE_LOCATION = 2 val SCAN_PERIOD: Long = 6000 lateinit var bleScanner : BluetoothLeScanner lateinit var bleScanResults: Map<String, BluetoothDevice> lateinit var bleScanCallback: ScanCallback override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val bluetoothManager: BluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager deviceBluetoothAdapter = bluetoothManager.adapter if (checkBleSupported()) toast("BLE supported") else toast("BLE not supported") validatePermissions() startBleScan() val handler = Handler() handler.postDelayed({ this.stopBleScan() }, SCAN_PERIOD) } fun checkBleSupported() = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE) && deviceBluetoothAdapter != null fun requestEnableBluetooth() { val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT) info("Requested user to enable bluetooth.") } fun checkFineLocationEnabled() = packageManager.checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, packageName) == PackageManager.PERMISSION_GRANTED fun requestEnableFineLocation() = requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_FINE_LOCATION) fun validatePermissions() { if (!deviceBluetoothAdapter?.isEnabled!!) requestEnableBluetooth() else if (!checkFineLocationEnabled()) requestEnableFineLocation() } fun startBleScan() { toast("Ble scan started") bleScanner = deviceBluetoothAdapter?.bluetoothLeScanner bleScanResults = mutableMapOf() bleScanCallback = BleScanCallback(bleScanResults as MutableMap<String, BluetoothDevice>) bleScanner?.startScan(bleScanCallback) } fun stopBleScan() { toast("Ble scan stopped") bleScanner.stopScan(bleScanCallback) bleScanResults.keys.forEach { address -> info("$address")} if (bleScanResults.size == 0) info("No device was found") } class BleScanCallback(scanResult: MutableMap<String, BluetoothDevice>) : ScanCallback(), AnkoLogger { var scanResults = scanResult override fun onScanResult(callbackType: Int, result: ScanResult?) { addScanResult(result) } override fun onBatchScanResults(results: MutableList<ScanResult>?) { results?.forEach({ result -> addScanResult(result) }) } override fun onScanFailed(errorCode: Int) { info("Bluetooth LE scan failed. Error code: $errorCode") } fun addScanResult(result: ScanResult?) { val device: BluetoothDevice = result!!.device val deviceAdress: String = device.address scanResults.put(deviceAdress, device) } } }