gpt4 book ai didi

java - 低功耗蓝牙扫描仪似乎工作正常,但找不到任何设备

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:26 25 4
gpt4 key购买 nike

我在低功耗蓝牙方面遇到问题。一切似乎都运行良好。

Logger显示:onClientRegistered() - status=0 clientIf=7 mClientIf=0,表示状态为成功,clientif=6指的是客户端接口(interface)。

所以扫描仪工作正常。问题是它找不到任何设备。

我在 list 中拥有 BLUETOOTH、BLUETOOTH_ADMIN、ACCESS_COARSE_LOCATION 权限。我在应用程序启动时检查它们。每个遇到“无扫描结果”问题的人都会收到有关启用位置的回复。我做到了,但仍然一无所获。

onScanResults 永远不会成功。

我使用的是 Android 7.0.0。

class MainActivity : AppCompatActivity(), AnkoLogger {

lateinit var bleManager: BluetoothManager
lateinit var bleAdapter: BluetoothAdapter
lateinit var bleScanner: BluetoothLeScanner

val REQUEST_BLUETOOTH = 0
val REQUEST_COARSE_LOCATION = 1

val ui by lazy { MainUI() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ui.setContentView(this)

checkLocationPerm()

bleManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bleAdapter = bleManager.adapter
bleScanner = bleAdapter.bluetoothLeScanner

checkEnableBluetooth()

ui.scanButton.onClick {
startScan()
}
}


fun checkLocationPerm() {
val perm = PermissionChecker.checkSelfPermission(applicationContext, Manifest.permission.ACCESS_COARSE_LOCATION)
if (perm == PermissionChecker.PERMISSION_GRANTED) {
info("Location permission granted")
} else requestEnableLocation()
}

fun requestEnableLocation() = requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
REQUEST_COARSE_LOCATION)

fun checkEnableBluetooth() {
if (!bleAdapter.isEnabled) {
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
startActivityForResult(enableBtIntent, REQUEST_BLUETOOTH)
info("Requested user to enable bluetooth.")
}
}

fun startScan() {
var scanResults = mutableMapOf<String?, BluetoothDevice?>()
var bleScanCallback = BleScanCallback(scanResults)
bleScanner.startScan(bleScanCallback)
}


class BleScanCallback(resultMap: MutableMap<String?, BluetoothDevice?>) : ScanCallback(), AnkoLogger {

var resultOfScan = resultMap

override fun onScanResult(callbackType: Int, result: ScanResult?) {
addScanResult(result)
info("I found a ble device ${result?.device?.address}")

}

override fun onBatchScanResults(results: MutableList<ScanResult>?) {
info("I found a device!")
}

override fun onScanFailed(errorCode: Int) {
info("Bluetooth LE scan failed. Error code: $errorCode")
}

fun addScanResult(scanResult: ScanResult?) {
val bleDevice = scanResult?.device
val deviceAddress = bleDevice?.address
resultOfScan.put(deviceAddress, bleDevice)
}
}
}

我只想记录蓝牙设备的地址。我检查了 BleScanCallback 对象,一切正常。我不知道我的代码有什么问题。

最佳答案

事实证明,支持蓝牙低功耗的手机是不可见的。当我在其中一台手机上模拟 GATT 服务器时,我的应用程序发现了这部手机。

关于java - 低功耗蓝牙扫描仪似乎工作正常,但找不到任何设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com