Мы используем ScanFilter в основной службе Android для сканирования маяков. Фильтр включает UUID службы. Когда мы удаляем UUID службы, мы можем обнаруживать маяки с указанным uuid. Однако когда мы включаем UUID службы, обнаружение маяка не удается.
private var scanFilter: ScanFilter = ScanFilter.Builder()
.setServiceUuid(ParcelUuid(UUID.fromString("0000feab-0000-1000-8000-00805f9b34fb"))) // Filter by Service UUID
.build()
если мы удалили фильтр UUID службы, мы получим следующие результаты для маяка, который мы хотим обнаружить в обратном вызове onScanResult
ScanResult{device=CF:63:4B:5D:E1:F9, scanRecord=ScanRecord [mAdvertiseFlags=6, mServiceUuids=null, mServiceSolicitationUuids=[], mManufacturerSpecificData={}, mServiceData={0000feab-0000-1000-8000-00805f9b34fb=[64, 0, 2, 11, -30, 0, 1, -49, 99, 75, 93, -31, -7, 48, 10]}, mTxPowerLevel=0, mDeviceName=0001, mTransportBlocks=[]], rssi=-71, timestampNanos=40980732284950, eventType=27, primaryPhy=1, secondaryPhy=0, advertisingSid=255, txPower=127, periodicAdvertisingInterval=0}
в приведенном выше результате mServiceUuids имеет значение null, и я думаю, что это проблема, возможно, маяк, который я обнаруживаю, не передает UUID службы вещания, я могу применить базу фильтров к mServiceData
код> как показано ниже:
private val beaconUuid: ParcelUuid = ParcelUuid.fromString("0000feab-0000-1000-8000-00805f9b34fb")
private var serviceData: ByteArray = byteArrayOf(64, 0) // This is the beginning of the service data
private var serviceDataMask: ByteArray = byteArrayOf(-1, -1) // This mask means match both bytes exactly
private var scanFilter: ScanFilter = ScanFilter.Builder()
.setServiceData(beaconUuid, serviceData, serviceDataMask) // Filter by Service Data
.build()
Я успешно фильтрую маяки с помощью mServiceData с текущим собственным адаптером Bluetooth. Однако мне нужно переключиться на библиотеку AltBeacon для совместимости с устройствами Samsung. AltBeacon фильтрует на основе mServiceUuid, когда устройство Samsung находится в автономном режиме, но я не могу найти способ фильтрации по mServiceData с помощью этой библиотеки. Может ли кто-нибудь предложить решение?
ОБНОВЛЕНО
ниже приведена конфигурация альтернативного маяка, которую я применил
beaconManager = BeaconManager.getInstanceForApplication(this)
beaconManager.enableForegroundServiceScanning(
createNotificationScan(), 1002
)
beaconManager.setEnableScheduledScanJobs(false)
beaconManager.backgroundBetweenScanPeriod = 5000
beaconManager.backgroundScanPeriod = 11000
beaconManager.foregroundBetweenScanPeriod = 1000
beaconManager.foregroundScanPeriod = 10000
BeaconManager.setDebug(true)
beaconManager.beaconParsers.clear()
val parser = BeaconParser().
setBeaconLayout("s:0-1=feab,m:2-3=4000,p:3-3:-41,i:4-21v")
parser.setHardwareAssistManufacturerCodes(intArrayOf(0x0A62))
beaconManager.beaconParsers.add(parser)
region = Region("all-beacons-region", null, null, null)
beaconManager.getRegionViewModel(region).rangedBeacons.observe(this, rangingObserver)
Обнаружение работает хорошо для упомянутых маяков с вышеуказанной конфигурацией, но тот же маяк не обнаруживается при выключении экрана.
ниже приведен фильтр применяется библиотекой altbeacon, когда экран устройства гаснет:
BluetoothLeScanFilter [mDeviceName=null, mDeviceAddress=null, mUuid=0000feab-0000-1000-8000-00805f9b34fb, mUuidMask=ffffffff-ffff-ffff-ffff-ffffffffffff, mServiceSolicitationUuid=null, mServiceSolicitationUuidMask=null, mServiceDataUuid=null, mServiceData=null, mServiceDataMask=null, mManufacturerId=-1, mManufacturerData=null, mManufacturerDataMask=null, mAdvertisingDataType=-1, mAdvertisingData=null, mAdvertisingDataMask=null]
Подробнее здесь: https://stackoverflow.com/questions/788 ... er-android
Ошибка обнаружения маяка с помощью uuid в ScanFilter android ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Чтобы сравнить UUID, могу ли я использовать == или использовать UUID.equals(UUID)?
Anonymous » » в форуме JAVA - 0 Ответы
- 56 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Получение UUID с помощью NamedNativeQuery: [B нельзя привести к java.util.UUID
Anonymous » » в форуме JAVA - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как создать UUID с тире, а не без тире, используя uuid-пакет для Python 3.6?
Anonymous » » в форуме Python - 0 Ответы
- 125 Просмотры
-
Последнее сообщение Anonymous
-