Привет! Я пытаюсь сканировать устройства BLE с помощью своего приложения, но мне не удалось его найти. Идея заключалась в том, чтобы запустить сканирование и найти ближайшие устройства, которые будут напечатаны в логарифме Android Studio. Сканирование начинается без проблем, но не может найти ни одного устройства BLE. Я пробовал другие приложения для сканирования, и я на 100% уверен, что мое устройство BLE передает и находится в зоне действия моего телефона.
Я добавил разрешения в манифест и запросил их в своем коде:
Код: Выделить всё
class BleScanner(val Activity: Activity, val Handler: Handler) {
Код: Выделить всё
private val bluetoothAdapter: BluetoothAdapter? by lazy {
val bluetoothManager = activity.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bluetoothManager.adapter
}
private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
// Se encontró un nuevo dispositivo BLE
val device: BluetoothDevice = result.device
val rssi: Int = result.rssi
// Dispositivo HM-10 encontrado
Log.d(TAG, "Dispositivo HM-10 encontrado: ${device.name} (${device.address}), RSSI = $rssi dBm")
}
}
fun startScan() {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), REQUEST_PERMISSION_CODE)
return
}
val scanSettings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build()
// Escanear dispositivos BLE por 10 segundos
handler.postDelayed({
stopScan()
}, 30000)
bluetoothAdapter?.bluetoothLeScanner?.startScan(null, scanSettings, scanCallback)
Log.d(TAG, "Iniciando escaneo de dispositivos BLE...")
}
fun stopScan() {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), REQUEST_PERMISSION_CODE)
return
}
bluetoothAdapter?.bluetoothLeScanner?.stopScan(scanCallback)
}
companion object {
const val REQUEST_PERMISSION_CODE = 123
const val TAG = "BleScanner"
}
Код: Выделить всё
private lateinit var bleScanner: BleScanner
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val startScanButton=findViewById(R.id.startscan)
val stopScanButton=findViewById(R.id.stopscan)
bleScanner = BleScanner(this, Handler())
startScanButton.setOnClickListener {
bleScanner.startScan()
}
stopScanButton.setOnClickListener {
bleScanner.stopScan()
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
BleScanner.REQUEST_PERMISSION_CODE -> {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
bleScanner.startScan()
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/758 ... oid-kotlin
Мобильная версия