Android Bluetooth Código de baja energía compatible con API> = 21 Y API <21

Estoy desarrollando una aplicación que tiene que conectarse con un dispositivo BLE, en mi código quiero usar el nuevo Scan y ScanCallback para BLE implementado desde API 21 (Android 5) pero tengo que mantener la compatibilidad con Android 4.3 y superior.

Entonces escribí el código, por ejemplo, de esta manera:

        if (Build.VERSION.SDK_INT >= 21) {
            mLEScanner.startScan(filters, settings, mScanCallback);
        } else {
            btAdapter.startLeScan(leScanCallback);
        }

Y he definido las 2 devoluciones de llamada, una para API 21 y superior y otra para API 18 a 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 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);
            }
        });


    }
};

También agregué la anotación

@TargetApi(21)

pero cuando inicio la aplicación en Android 4.x, se bloquea inmediatamente al informar el error de que no se puede encontrar la clase ScanCallback (la que se debe usar solo con Android 5 y superior).

¿Como puedo resolver esto?

Muchas gracias. Daniele

Respuestas a la pregunta(4)

Su respuesta a la pregunta