我正在开发一款需要与蓝牙低功耗设备连接的应用程序,在我的代码中,我想使用从API 21(Android 5)开始实现的新的BLE扫描和扫描回调函数,但我必须保持与Android 4.3及以上版本的兼容性。
因此,我按照以下方式编写了代码:
if (Build.VERSION.SDK_INT >= 21) {
mLEScanner.startScan(filters, settings, mScanCallback);
} else {
btAdapter.startLeScan(leScanCallback);
}
我已经定义了两个回调函数,一个针对Android 5.0及以上的API,另一个针对Android 4.3到4.4的API:
//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 BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
btAdapter.stopLeScan(leScanCallback);
runOnUiThread(new Runnable() {
@Override
public void run() {
mBluetoothGatt = device.connectGatt(context, false, btleGattCallback);
}
});
}
};
我还加上了注释。
@TargetApi(21)
但是当我在Android 4.x上启动应用程序时,它会立即崩溃,并报告错误,即找不到类ScanCallback(仅用于Android 5及以上版本)。
我该如何解决这个问题?
非常感谢。 Daniele。