我正在使用Flutter制作信标广播应用程序。 我正在使用的库是pub.dev上的“ beacon_broadcast”。 当我尝试启动它时,控制台会显示:
D/BeaconParser( 7318): Parsing beacon layout: m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
D/BluetoothAdapter( 7318): isLeEnabled(): ON
D/BluetoothAdapter( 7318): isLeEnabled(): ON
E/BeaconTransmitter( 7318): Advertisement start failed, code: 2
错误代码2是什么意思?我不需要任何其他帮助,我只需要含义,所以我认为不需要显示代码。
此外,请尽可能添加错误代码和含义的列表。
答案 0 :(得分:1)
每种电话型号都有不同的蓝牙芯片,每个蓝牙芯片都支持有限数量的“广告插槽”。每个插槽都允许启动一个蓝牙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个或更多插槽。有些手机根本没有任何插槽。参见a list of devices with no advertising support。
每个电话OEM都实现了一部分蓝牙堆栈,该堆栈将硬件桥接到Android操作系统。这段代码几乎总是封闭源代码。取决于此OEM层的实施方式(以及正确性),它会影响可用的广告位数量。
不幸的是,没有API可以查询手机理论上可用的广告位总数。如果没有OEM的源代码,唯一的办法就是在手机上恢复出厂设置(以确保没有安装其他应用程序正在使用插槽),然后构建一个尝试依次启动一个广告客户的应用程序直到一个失败。