目标是读取蓝牙LE心率监测器的值.
使用谷歌的样本,我明白了
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);
}
}, SCAN_PERIOD);
mScanning = true;
mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}
Run Code Online (Sandbox Code Playgroud)
导致mBluetoothAdapter.stopLeScan显示为已弃用.但是Startscan不是方法mBluetoothAdapter.
如何更改它以使其与当前API一起使用?
我正在开发一个必须与BLE设备连接的应用程序,在我的代码中,我想使用从API 21(Android 5)实现的新的Scan和ScanCallback for BLE,但我必须保持与Android 4.3及更高版本的兼容性.
所以我用这种方式编写了代码:
if (Build.VERSION.SDK_INT >= 21) {
mLEScanner.startScan(filters, settings, mScanCallback);
} else {
btAdapter.startLeScan(leScanCallback);
}
Run Code Online (Sandbox Code Playgroud)
我已经定义了2个回调,一个用于API 21及更高版本,另一个用于API 18到20:
//API 21
private ScanCallback mScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
BluetoothDevice btDevice = result.getDevice();
connectToDevice(btDevice);
}
public void connectToDevice(BluetoothDevice device) {
if (mGatt == null) {
mGatt = device.connectGatt(context, false, btleGattCallback);
if (Build.VERSION.SDK_INT < 21) {
btAdapter.stopLeScan(leScanCallback);
} else {
mLEScanner.stopScan(mScanCallback);
}
}
}
};
//API 18 to 20
private …Run Code Online (Sandbox Code Playgroud)