gpt4 book ai didi

android - 列出 BLE 设备 Android - Kotlin

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:13 25 4
gpt4 key购买 nike

我正在尝试使用 Kotlin(Java 版本也不起作用)列出 Android 设备上的所有 BLE 设备,但我没有收到任何设备或任何回电,除了“扫描”已经开始了”我在 list 中拥有正确的使用权限。

这是我正在尝试的当前最少代码。但即使是来自 Google 的示例代码也列出了所有设备。我在运行 Android 版本 8.1.0 的 Pixel 上运行。我让它在 iOS 上运行,带有基本的 BLE 设备列表 (Swift)!

 private val bleScanner = object :ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult?) {
super.onScanResult(callbackType, result)
Log.d("DeviceListActivity","onScanResult: ${result?.device?.address} - ${result?.device?.name}")
}

override fun onBatchScanResults(results: MutableList<ScanResult>?) {
super.onBatchScanResults(results)
Log.d("DeviceListActivity","onBatchScanResults:${results.toString()}")
}

override fun onScanFailed(errorCode: Int) {
super.onScanFailed(errorCode)
Log.d("DeviceListActivity", "onScanFailed: $errorCode")
}

}

private val bluetoothLeScanner: BluetoothLeScanner
get() {
val bluetoothManager = applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val bluetoothAdapter = bluetoothManager.adapter
return bluetoothAdapter.bluetoothLeScanner
}

class ListDevicesAdapter(context: Context?, resource: Int) : ArrayAdapter<String>(context, resource)

override fun onCreate(savedInstanceState: Bundle?) {
Log.d("DeviceListActivity", "onCreate()")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_device_list)


}

override fun onStart() {
Log.d("DeviceListActivity","onStart()")
super.onStart()

bluetoothLeScanner.startScan(bleScanner)

}

override fun onStop() {
bluetoothLeScanner.stopScan(bleScanner)
super.onStop()
}

最佳答案

您需要声明权限:

uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

对于 Android 6.0 以上的设备,您手动请求此权限:

  override fun onStart() {
Log.d("ScanDeviceActivity", "onStart()")
super.onStart()
when (PermissionChecker.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
PackageManager.PERMISSION_GRANTED -> bluetoothLeScanner.startScan(bleScanner)
else -> requestPermissions(arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), 1)
}
}


override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when (requestCode) {
1 -> when (grantResults) {
intArrayOf(PackageManager.PERMISSION_GRANTED) -> {
Log.d("ScanDevices", "onRequestPermissionsResult(PERMISSION_GRANTED)")
bluetoothLeScanner.startScan(bleScanner)
}
else -> {
Log.d("ScanDevices", "onRequestPermissionsResult(not PERMISSION_GRANTED)")
}
}
else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}

关于android - 列出 BLE 设备 Android - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50910302/

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