Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可调谐信标扫描_Android_Bluetooth_Ibeacon Android - Fatal编程技术网

Android 可调谐信标扫描

Android 可调谐信标扫描,android,bluetooth,ibeacon-android,Android,Bluetooth,Ibeacon Android,Android 4.3中添加了蓝牙LE,但似乎没有后台扫描模式,一旦应用程序注册通过附近可用的BLE UUID收到通知,该模式就会唤醒应用程序 通过iOS7和ibeaconsapi似乎完全可以做到这一点。有人知道安卓4.3中是否有这样一个功能,或者是否有一个很好的解决办法,可以在BLE环境中定期扫描BLE设备 我认为有如下解决方法: 您需要实现一个服务并创建线程到while循环来调用mBluetoothAdapter.starteScan(mLeScanCallback),然后您可以检查是否由

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

通过iOS7和ibeaconsapi似乎完全可以做到这一点。有人知道安卓4.3中是否有这样一个功能,或者是否有一个很好的解决办法,可以在BLE环境中定期扫描BLE设备


我认为有如下解决方法:
您需要实现一个服务并创建线程到while循环来调用mBluetoothAdapter.starteScan(mLeScanCallback),然后您可以检查是否由特定设备触发并进一步搜索特定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:

此外,当无法进行扫描时(由于蓝牙关闭、位置关闭、权限吊销),您必须在再次满足所有必要条件时重新启动扫描,因为您需要广播侦听器

能够扫描的条件:

  • 有蓝牙LE芯片:任何

  • 打开蓝牙:任何

  • 位置:安卓6+

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

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


我即将实现这一点。但我可能会创建一个广播接收器,每1分钟唤醒一次,而不是运行一个连续服务。在Geofences正式加入到游戏服务之前,我就用过这个。问题很明显,信息/扫描没有在应用程序之间共享,效率也会降低。你的建议还可以,在某些情况下也可以使用,但这更像是一种幼稚的实现。这种方法的问题肯定是功耗。请注意BLE文档页面中的这一行“要查找BLE设备,请使用startedScan()方法。此方法将BluetoothAdapter.LeScanCallback作为参数。您必须实现此回调,因为这是返回扫描结果的方式。因为扫描需要大量电池…”我认为可能有更好的方法来做到这一点,比如注册系统范围的事件,比如GeoFenging API+1,提醒文档说它需要大量电池。您还可以连接到尚未收到广告的设备,并将自动连接设置为
true
。(蓝牙设备可以这样创建:
BluetoothAdapter.getDefaultAdapter().getRemoteDevice(“20:00:A0:60:DD:05”);
)但是,它只有在开始扫描时才连接。似乎还没有什么背景扫描。也许他们以后会添加。你知道我是否可以用这段代码检测iBeacon,或者我需要额外的库吗?