You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三星SM-T285安卓5.1.1使用altbeacon2.16.3开启Beacon广播报错求助

问题根因

  • 报错的核心原因是三星SM-T285硬件本身不支持BLE广播功能,日志第一行E/BluetoothAdapter: bluetooth le advertising not supported已经给出明确提示。虽然Android 5.0及以上系统开放了BLE广播API,但不是所有搭载对应版本系统的设备都具备相关硬件能力,很多老款入门级设备只支持BLE扫描,阉割了广播模块。
  • 空指针异常是因为设备不支持BLE广播时,系统BluetoothAdapter.getBluetoothLeAdvertiser()方法会返回null,altbeacon 2.16.3版本的代码没有对这个返回值做非空校验,直接调用startAdvertising方法就触发了崩溃。

解决方案

  1. 加前置校验避免崩溃
    在初始化BeaconTransmitter之前先做兼容性检测,不支持的设备直接给出业务提示,不要走到后续广播逻辑:
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// 先校验蓝牙是否可用
if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
    // 自定义逻辑:提示用户开启蓝牙
    return;
}
// 校验系统版本和BLE广播能力
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    // 自定义逻辑:提示5.0以下系统不支持广播
    return;
}
BluetoothLeAdvertiser advertiser = bluetoothAdapter.getBluetoothLeAdvertiser();
if (advertiser == null) {
    // 自定义逻辑:提示当前设备不支持Beacon广播
    return;
}
// 校验通过后再执行原来的广播初始化代码
Beacon beacon = new Beacon.Builder()
        .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
        .setId2("1")
        .setId3("2")
        .setManufacturer(0x0118)
        .setTxPower(-59)
        .setDataFields(Arrays.asList(new Long[] {0l}))
        .build();
BeaconParser beaconParser = new BeaconParser()
        .setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon);
  1. 硬件层面无破解方案
    如果业务必须在这款设备上实现Beacon广播功能,没有软件层面的解决方法,只能更换支持BLE广播的设备。
  2. 库层面兼容(可选)
    你也可以修改altbeacon 2.16.3版本的源码,在BeaconTransmitter.startAdvertising方法调用BLE广播接口前增加非空判断,不支持时直接回调错误通知,避免应用崩溃。

内容的提问来源于stack exchange,提问作者Isaias Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 18:06:01