使用Kotlin扫描BLE每次都需要获得许可



我正在使用kotlin开发一个android应用程序。当我写一些关于扫描BLE设备的逻辑时,无论我想做什么,它都需要许可。例如,在这个函数中,我请求权限。


private fun startBleScan() {
if (Build.VERSION.SDK_INT >= 21 && !isLocationPermissionGranted) {
requestLocationPermission()
}
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH_SCAN
) != PackageManager.PERMISSION_GRANTED
) {
requestBleScanPermission()
}
bleScanner.startScan(scanFilters, scanSettings, scanCallback)
}

但当我想使用stopBleScan时,它也需要权限。(我还没有添加,现在ide告诉我添加权限(

private fun stopBleScan() {
bleScanner.startScan(scanCallback)
}

最后,当我想使用result.device.name时,ide还告诉我它需要权限。(未经许可,我只能使用result.device,我不知道为什么(。

private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
with(result.device) {
Log.i("ScanCallback", "$name") // ide tells me it needs permission, this line doesn't work
foundDevice = true
}
}
}

有什么解决方案吗,所以我只能请求一次权限,我认为这很正常,否则每次都会这样做。我真的是科特林和BLE的新手,请帮帮我,提前谢谢!

为了在Android上对设备进行BLE扫描,需要在清单文件(AndroidManifest.xml(中添加几个权限,如下所示:-

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

除此之外,还需要动态地向用户请求权限。查看以下链接以获取更多信息:-

  • Android BLE开发的终极指南
  • 需要在Android上启用BLE扫描的位置
  • 需要在Android 10上为BLE扫描启用位置
  • 在未经用户许可的情况下打开Android LE扫描

最新更新