在 Marshmallow 中使用蓝牙扫描定位精度
Using Bluetooth scanning for location accuracy in Marshmallow
在 Android 4.3 中,Android 实现了始终在线的 WiFi 理念,即使您关闭了 Wi-Fi,设备和应用程序仍然可以扫描 WiFi 网络以改进位置的准确性。除了使用网络三角测量,这是另一种尽快获取当前位置的方法,而不必过多依赖 GPS 信号。
Android M 正在进一步推进这一想法,将蓝牙扫描添加到等式中。在 M 的位置设置下,您会在菜单中找到扫描选项,可以在其中打开和关闭 Wifi 和蓝牙扫描。启用后,蓝牙扫描可能会寻找像信标这样的 BLE 设备,以便更快地定位。
图像已调整大小。点击查看大图
这在未来在购物中心、机场和各种室内或地下位置可能非常有用,在这些位置,蓝牙信标的覆盖范围和散布可能超过缓慢或不可能的 GPS 信号锁定。事实上,它始终处于开启状态,只要应用程序需要定位即可访问,这比您必须记住手动打开蓝牙更方便。
任何人都可以帮助提供一些见解或示例代码,以便在没有打开主要蓝牙设置的情况下使用 BLE 扫描信标吗?
我想通了。
我们必须编写一个系统应用程序并使用
BluetoothAdapter.enableBLE()
方法。
此方法适用于 special/system 使用低功耗蓝牙扫描附近设备的应用程序,如果在设备设置中关闭蓝牙,这些应用程序主要用于定位 accuracy.Even。
然后我们可以使用
BluetoothAdapter.LeScanCallback
回调以获取设备详细信息。
样本:
调用方法:
mBluetoothAdapter.enableBLE())
回调:
私人 BluetoothAdapter.LeScanCallback mLeScanCallback =
新 BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
if( device == null ){
System.out.println("-------onLeScan "+device);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mLeDeviceListAdapter.addDevice(device);
mLeDeviceListAdapter.notifyDataSetChanged();
}
});
}
};
谢谢
在 Android 4.3 中,Android 实现了始终在线的 WiFi 理念,即使您关闭了 Wi-Fi,设备和应用程序仍然可以扫描 WiFi 网络以改进位置的准确性。除了使用网络三角测量,这是另一种尽快获取当前位置的方法,而不必过多依赖 GPS 信号。
Android M 正在进一步推进这一想法,将蓝牙扫描添加到等式中。在 M 的位置设置下,您会在菜单中找到扫描选项,可以在其中打开和关闭 Wifi 和蓝牙扫描。启用后,蓝牙扫描可能会寻找像信标这样的 BLE 设备,以便更快地定位。
图像已调整大小。点击查看大图
这在未来在购物中心、机场和各种室内或地下位置可能非常有用,在这些位置,蓝牙信标的覆盖范围和散布可能超过缓慢或不可能的 GPS 信号锁定。事实上,它始终处于开启状态,只要应用程序需要定位即可访问,这比您必须记住手动打开蓝牙更方便。
任何人都可以帮助提供一些见解或示例代码,以便在没有打开主要蓝牙设置的情况下使用 BLE 扫描信标吗?
我想通了。
我们必须编写一个系统应用程序并使用
BluetoothAdapter.enableBLE()
方法。 此方法适用于 special/system 使用低功耗蓝牙扫描附近设备的应用程序,如果在设备设置中关闭蓝牙,这些应用程序主要用于定位 accuracy.Even。 然后我们可以使用
BluetoothAdapter.LeScanCallback
回调以获取设备详细信息。
样本:
调用方法:
mBluetoothAdapter.enableBLE())
回调: 私人 BluetoothAdapter.LeScanCallback mLeScanCallback = 新 BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
if( device == null ){
System.out.println("-------onLeScan "+device);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mLeDeviceListAdapter.addDevice(device);
mLeDeviceListAdapter.notifyDataSetChanged();
}
});
}
};
谢谢