У меня есть Samsung SM-G950F, который поддерживает рекламу BLE , но после нескольких рекламных объявлений он начинает выдавать код ошибки 2 (ADVERTISE_FAILED_TOO_MANY_ADVERTISERS) , в котором документация Android сообщает: «Failed toначать рекламу, потому что ни один рекламный экземпляр не доступен. "и единственный способ заставить его работать некоторое время - перезагрузить устройство.У другого устройства, HTC 10, есть похожая проблема, он прекрасно работает в начале, и в конце концов он медленно пропускает, скажем, 1 в каждых десяти или 20 передачах, но быстро ухудшается, чтобы посылать, скажем, 1 в каждых 50. Наконец, устройство нуждается в перезагрузке.чтобы приложение снова заработало.
Мой пример использования следующий:
- call bluetoothLeAdvertiser.startAdvertising (...)
- Вызовите этот метод, скажем, примерно100 раз каждые 300 мс (работает нормально до определенной точки)
- Затем в какой-то момент вызывается AdvertiseCallback onStartFailure (int errorCode) и возвращается код ошибки 2
- перезагрузите телефон (закрытиеBluetooth и возврат назад или закрытие приложения не решают проблему)
- повторите процесс
Это проблема специально для устройства Samsung S8 или я что-то не так делаю с моей реализацией?Есть ли способ очистить / сбросить рекламодателей программным способом?
Кроме того, если вам известны какие-либо другие устройства с аналогичной проблемой, было бы неплохо, если бы вы могли поделиться ими, чтобы помочь другим знать о них.
Примечание: тот же код отлично работает на моем Samsung S5 SM-G900F под управлением Android 6.0.1
фрагменты кода
public void startAdvertising() {
// making sure that the advertiser object was initialised, it is null if the user opened the app
// without having the bluetooth enable
if (bluetoothLeAdvertiser == null) {
bluetoothLeAdvertiser = bluetoothChecker.getBluetoothAdapter().getBluetoothLeAdvertiser();
// if it's still null it means the bluetooth of the device is off
if (bluetoothLeAdvertiser == null) {
bluetoothLeAdvertiserWrapperCallback.onBleAdvertiseIsNull();
return;
}
}
stopAdvertising();
bluetoothLeAdvertiser.startAdvertising(advertiseSettings, advertiseData, bleAdvertiseCallback);
}
и
public void stopAdvertising() {
isAdvertising = false;
bluetoothLeAdvertiser.stopAdvertising(bleAdvertiseCallback);
bluetoothLeAdvertiserWrapperCallback.onBleAdvertiseStoppedOrTimeout();
}