蓝牙 LE 是在 Android 4.3 中添加的,但似乎没有后台扫描模式,一旦应用程序注册通过附近可用的 BLE UUID 获得通知,它就会唤醒应用程序。
这似乎可以通过 iOS7 和 iBeacons API 实现。有谁知道 Android 4.3 中是否有这样的功能,或者是否有一个很好的解决方法来定期扫描 BLE 设备的 BLE 环境?
http://developer.android.com/guide/topics/connectivity/bluetooth-le.html
蓝牙 LE 是在 Android 4.3 中添加的,但似乎没有后台扫描模式,一旦应用程序注册通过附近可用的 BLE UUID 获得通知,它就会唤醒应用程序。
这似乎可以通过 iOS7 和 iBeacons API 实现。有谁知道 Android 4.3 中是否有这样的功能,或者是否有一个很好的解决方法来定期扫描 BLE 设备的 BLE 环境?
http://developer.android.com/guide/topics/connectivity/bluetooth-le.html
我认为有一个解决方法如下:您需要实现一个服务并创建线程到while循环来调用mBluetoothAdapter.startLeScan(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:https ://github.com/inthepocket/ibeacon-scanner-android
此外,当无法扫描时(由于蓝牙关闭、位置关闭、权限撤销),每次再次满足所有需要的条件时,您都必须重新开始扫描,这里您将需要广播侦听器。
能够扫描的条件:
有一个低功耗蓝牙芯片:任何。
开启蓝牙:任何。
位置:Android 6+。
具有位置运行时权限:Android 6+。
在 30 秒内最多开始 5 次扫描:Android 7+。