私は私のコードで私はBLEのためのAPIから実装された新しいスキャンとScanCallbackを使用したい、BLEデバイスと接続する必要がアプリを開発しています21(Android 5)でも、Android 4.3以降との互換性を維持する必要があります。のAndroidのBluetooth低エネルギーコード> = 21 AND API <21
if (Build.VERSION.SDK_INT >= 21) {
mLEScanner.startScan(filters, settings, mScanCallback);
} else {
btAdapter.startLeScan(leScanCallback);
}
をそして、私は20に2つのコールバック、API 21用と、上記とAPI 18のための1つを定義しています:
だから私は、このように、例えば、コードを書いた
//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。
完全なスタックトレースを表示できますか? –