Каждая модель телефона имеет свой чип Bluetooth, каждый из которых поддерживает ограниченное количество «рекламных слотов». Каждый слот позволяет запускать одну рекламу Bluetooth LE. Если телефон уже использовал все доступные рекламные места, вы получите эту ошибку.
ADVERTISE_FAILED_TOO_MANY_ADVERTISERS
Added in API level 21
public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS
Failed to start advertising because no advertising instance is available.
Constant Value: 2 (0x00000002)
См .: https://developer.android.com/reference/android/bluetooth/le/AdvertiseCallback, в которой есть список всех и другие коды ошибок.
Поскольку слоты являются общим ресурсом телефона, возможно, что другое приложение может использовать некоторые из слотов. Старые телефоны, такие как Nexus 4, поддерживают только один слот. Новые телефоны, такие как Pixel 3a, поддерживают 10 или более слотов. Некоторые телефоны вообще не имеют слотов. См. Здесь список устройств без поддержки рекламы .
Каждый изготовитель телефона реализует часть стека Bluetooth, которая соединяет оборудование с операционной системой Android. Этот код почти всегда с закрытым исходным кодом. В зависимости от того, как этот OEM-уровень реализован (и насколько правильно), он может влиять на количество доступных рекламных мест.
К сожалению, нет API для запроса общего количества рекламных мест, которые теоретически доступны на телефоне. , Без исходного кода от OEM-производителя единственный способ определить это - восстановить заводские настройки на вашем телефоне (чтобы убедиться, что никакие другие приложения не используют слот), и создать приложение, которое пытается запустить одного рекламодателя за другим, считая до тех пор, пока один не потерпит неудачу.