繁体   English   中英

Android BLE Beacon扫描

[英]Android BLE Beacon scanning

Android 4.3中添加了蓝牙LE,但似乎没有后台扫描模式,一旦注册通过附近可用的BLE UUID进行通知,它就会唤醒应用程序。

这似乎可以通过iOS7和iBeacons API实现。 有没有人知道Android 4.3中是否有这样的功能,或者是否有针对BLE设备进行周期性扫描BLE环境的良好解决方法?

http://developer.android.com/guide/topics/connectivity/bluetooth-le.html

http://techcrunch.com/2013/09/11/estimote-details-ios-7-ibeacon-support-for-its-contextual-proximity-shopping-devices/

我认为有一个解决方法如下:你需要实现一个服务并创建线程到while循环来调用mBluetoothAdapter.startLeScan(mLeScanCallback),然后你可以检查是否被特定设备变为trigeed并进一步搜索特定的UUID。

直接来自android示例,您可以使用处理程序:

private void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                    invalidateOptionsMenu();
                }
            }, SCAN_PERIOD);

            mScanning = true;
            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
        invalidateOptionsMenu();
    }

根据我的经验,最好创建一个保持运行的服务。 重要的是只扫描您感兴趣的信标,否则您将浪费大量的cpu功率解析信标消息。

这个库可以帮助您扫描您感兴趣的iBeacons: https//github.com/inthepocket/ibeacon-scanner-android

此外,当无法扫描时(由于蓝牙关闭,位置关闭,许可被撤销),每次再次满足所有需要的条件时,您必须重新开始扫描,此处您需要广播监听器。

能够扫描的条件:

  • 拥有蓝牙LE芯片:任何。

  • 开启蓝牙:任何。

  • 位置:Android 6+。

  • 拥有位置运行时权限:Android 6+。

  • 最多在30秒内开始5次扫描:Android 7+。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM