Сканирование BLE-устройств на Android: KotlinAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сканирование BLE-устройств на Android: Kotlin

Сообщение Anonymous »

.
Привет! Я пытаюсь сканировать устройства 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"
}
класс MainActivity: AppCompatActivity() {

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»