В настоящее время я создаю приложение, которое превращает мое устройство в маяк, одновременно сканируя другие маяки. Поэтому я могу отслеживать маяки, с которыми я соприкасался.
Проблема
Ток Я тестировал этот код в следующем сценарии ios:
- Android TO Android - Трансляция и сканирование - Хорошо работает
- Android До IOS - Broadcast & Scanning В обоих направлениях - Хорошо работает
- IOS до IOS - Не работает (Когда я транслирую UUID с устройства IOS, я вижу UUID на устройстве Android, но не вижу UUID на любом устройстве IOS.)
- Я установил этот фрагмент кода на 4 устройствах (2 Android & 2 IOS). Теперь все 4 устройства передают разные UUID и одновременно прослушивают.
- В Android Устройствах я вижу 1 UUID другого Android Устройства и 2 UUID из IOS Устройств
- В IOS Устройствах, я вижу 2 Android UUID, но Я не вижу другого IOS устройства UUID.
Это очень странно, и мне нужна помощь, чтобы решить эту проблему, пожалуйста!
I В настоящее время реализованы 2 пакета для достижения этой функциональности:
(1) Для трансляции
beacon_broadcast: https://pub.dev/packages/beacon_broadcast версия: 0.2.1
(2) Для сканирования других маяков
flutter_blue: https://pub.dev/packages/flutter_blue версия: 0.6.3 + 1
Вот несколько примеров моего кода
(1) для вещания
String UUID = 'DYNAMIC_UUID_FOR_EACH_DEVICE';
static const MAJOR_ID = 1;
static const MINOR_ID = 30;
static const TRANSMISSION_POWER = -59;
static const IDENTIFIER = 'com.example.myDeviceRegion';
static const LAYOUT = 'm:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24';
static const MANUFACTURER_ID = 0x004c;
BeaconBroadcast beaconBroadcast = BeaconBroadcast();
beaconBroadcast
.setUUID(UUID)
.setMajorId(MAJOR_ID)
.setMinorId(MINOR_ID)
.setTransmissionPower(TRANSMISSION_POWER)
.setIdentifier(IDENTIFIER)
.setLayout(LAYOUT)
.setManufacturerId(MANUFACTURER_ID);
.start();
(2) для сканирования
FlutterBlue flutterBlue = FlutterBlue.instance;
flutterBlue.startScan(timeout: Duration(seconds: 30));
flutterBlue.scanResults.listen((List<ScanResult> results) {
print('scanningListen...');
for (ScanResult result in results) {
result.advertisementData.manufacturerData.forEach((item, hexcodeAsArray) => {
print("calculated UUID String : " + calculateHexFromArray(v));
_addToScanResult(calculateHexFromArray(v));
});
}
}
String calculateHexFromArray(decimalArray) {
String uuid = '';
decimalArray.forEach((i) => {uuid += i.toRadixString(16).padLeft(2, '0')});
String uuid1 = uuid.substring(4, uuid.length - 12);
return uuid1.toUpperCase();
}