Android信标库-BLE信标检测不起作用

栓塞剂

我正在尝试使用Android中的Android信标库检测信标我创建了一个在后台运行并检测信标的服务。

问题是当蓝牙关闭时,应用程序未检测到信标。但是,如果我打开蓝牙,则它可以正常工作。还有一件很奇怪的事情。如果我在应用程序运行时再次关闭蓝牙,它仍会继续检测。这意味着BLE检测正常,但仅当我打开蓝牙并再次将其关闭时才起作用。

如何启用BLE检测?下面是我的实现。我想念什么吗?

信标服务等级

public class BeaconDiscoverer extends Service implements BeaconConsumer {
    private static final String TAG = BeaconDiscoverer.class.getSimpleName();
    private static BeaconManager beaconManager;
    private static Region region;
    private BackgroundPowerSaver backgroundPowerSaver;

    public BeaconDiscoverer() {
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        region = new Region("myRangingUniqueId", null, null, null);
        beaconManager = BeaconManager.getInstanceForApplication(this);

        beaconManager.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));

        configureBatterySaverMode();

        beaconManager.bind(this);
    }

    @Override
    public void onDestroy() {
        beaconManager.unbind(this);
        super.onDestroy();
    }

    private void configureBatterySaverMode() {
        BeaconManager.setAndroidLScanningDisabled(true);
        backgroundPowerSaver = new BackgroundPowerSaver(getApplicationContext());

        // set the duration of the scan to be 5 seconds
        beaconManager.setBackgroundScanPeriod(Utility.convertToMilliseconds(2));
        // set the time between each scan to be 1 min (60 seconds)
        beaconManager.setBackgroundBetweenScanPeriod(Utility.convertToMilliseconds(25));
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "BeaconDiscoverer started up");

        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onBeaconServiceConnect() {
        Log.d(TAG, "onBeaconServiceConnect");
        beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {
                    Beacon firstBeacon = beacons.iterator().next();
                    Log.i(TAG, "Beacon detected: " + firstBeacon.getDistance() + " m. - " + firstBeacon.getBluetoothAddress());

                }
            }
        });

        startRanging();
    }

    public void stopRanging() {
        try {
            beaconManager.stopRangingBeaconsInRegion(region);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    public void startRanging() {
        if (User.currentUser() == null)
            return;

        try {
            beaconManager.startRangingBeaconsInRegion(region);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

应用类别

public class App extends Application {
    private static final String TAG = App.class.getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();

        startService(new Intent(this, BeaconDiscoverer.class));
    }
}
大卫京

简单答案:您必须启用蓝牙才能检测到库中的信标信标使用Bluetooth LE来通告它们的存在,并且必须打开Bluetooth无线电才能听到信号。

我无法解释为什么您在关闭蓝牙后仍继续检测信标。一种可能是,您只需在库消失的短暂扫描周期内从内存缓存中看到它们,然后它们就会消失。另一种可能是,Android设备在关闭蓝牙时说蓝牙已关闭,但实际上并没有关闭。

典型的方法是在启动应用程序时检测蓝牙是否关闭,并提示用户将其打开。参考应用程序中有示例代码可以在此处执行此操作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

监控非信标BLE设备(Android信标库)

来自分类Dev

邻近信标API与Android信标库?

来自分类Dev

无法使用Android信标库检测ibeacon

来自分类Dev

停止记录Android信标库

来自分类Dev

Altbeacon android 信标库在设备屏幕关闭很长时间后不起作用

来自分类Dev

通过Android信标库中的mac地址过滤信标

来自分类Dev

Android 信标库看不到任何信标

来自分类Dev

Android BLE信标扫描

来自分类Dev

停止扫描信标:stopRangingBeaconsInRegion()不起作用

来自分类Dev

Android信标库Eddystone遥测。温度

来自分类Dev

来自Android信标库的ScanJob中的ConcurrentModificationException

来自分类Dev

Android信标库背景南宁间隔

来自分类Dev

android 信标库作为 ibeacon 传输

来自分类Dev

如何使用Altbeacon Android库检测多个信标?

来自分类Dev

使用Radius Networks Android信标库检测iBeacons UUID

来自分类Dev

使用Android信标库检测Eddystone-TLM

来自分类Dev

使用Radius Networks Android信标库检测iBeacons UUID

来自分类Dev

使用Android信标库检测Eddystone-TLM

来自分类Dev

如何使用Altbeacon:Android信标库在后台对信标进行测距?

来自分类Dev

使用altBeacon库,所有信标未在Android中显示

来自分类Dev

AltBeacon:Android信标库。如何为Eddystone定义区域?

来自分类Dev

AltBeacon:Android信标库。如何为Eddystone定义区域?

来自分类Dev

在Android中的altbeacon库中找到StickNFind信标

来自分类Dev

iOS CLLocationManager未检测到Android信标库从Android发送的iBeacon信号

来自分类Dev

Android设备充当信标

来自分类Dev

是否可以将启用BLE的Android / iPhone用作BLE信标?

来自分类Dev

AltBeacon:在Android上启动信标

来自分类Dev

IBeacon Android无法识别信标

来自分类Dev

测距时的Android信标监控

Related 相关文章

  1. 1

    监控非信标BLE设备(Android信标库)

  2. 2

    邻近信标API与Android信标库?

  3. 3

    无法使用Android信标库检测ibeacon

  4. 4

    停止记录Android信标库

  5. 5

    Altbeacon android 信标库在设备屏幕关闭很长时间后不起作用

  6. 6

    通过Android信标库中的mac地址过滤信标

  7. 7

    Android 信标库看不到任何信标

  8. 8

    Android BLE信标扫描

  9. 9

    停止扫描信标:stopRangingBeaconsInRegion()不起作用

  10. 10

    Android信标库Eddystone遥测。温度

  11. 11

    来自Android信标库的ScanJob中的ConcurrentModificationException

  12. 12

    Android信标库背景南宁间隔

  13. 13

    android 信标库作为 ibeacon 传输

  14. 14

    如何使用Altbeacon Android库检测多个信标?

  15. 15

    使用Radius Networks Android信标库检测iBeacons UUID

  16. 16

    使用Android信标库检测Eddystone-TLM

  17. 17

    使用Radius Networks Android信标库检测iBeacons UUID

  18. 18

    使用Android信标库检测Eddystone-TLM

  19. 19

    如何使用Altbeacon:Android信标库在后台对信标进行测距?

  20. 20

    使用altBeacon库,所有信标未在Android中显示

  21. 21

    AltBeacon:Android信标库。如何为Eddystone定义区域?

  22. 22

    AltBeacon:Android信标库。如何为Eddystone定义区域?

  23. 23

    在Android中的altbeacon库中找到StickNFind信标

  24. 24

    iOS CLLocationManager未检测到Android信标库从Android发送的iBeacon信号

  25. 25

    Android设备充当信标

  26. 26

    是否可以将启用BLE的Android / iPhone用作BLE信标?

  27. 27

    AltBeacon:在Android上启动信标

  28. 28

    IBeacon Android无法识别信标

  29. 29

    测距时的Android信标监控

热门标签

归档