내 장치를 찾거나 나중에 10 초 후에 BLE 장치를 검색하려고하는데 스캔을 중지하려고합니다. 그러나 어떤 이유로 onBatchScanResults가 무기한 호출됩니다.ScanCallback onBatchScanResults가 무기한 호출됩니다.
스캔을 중지 한 후에도 스캔 한 결과의 대기열이 비워 질 때까지 onBatchScanResults가 호출된다는 것을 발견했습니다. 하지만 제 경우에는 결코 멈추지 않습니다. 아래 코드는 어떻게 이것을 달성하려고 노력하고 있습니다.
public void scan() {
scanner = BluetoothLeScannerCompat.getScanner();
final ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(1000).setUseHardwareBatchingIfSupported(false).build();
final List<ScanFilter> filters = new ArrayList<>();
filters.add(new ScanFilter.Builder().setServiceUuid(new ParcelUuid(getFilterUUID()))
.build());
Log.e(TAG, "Scanning.....");
scanner.startScan(filters, settings, scanCallback);
mIsScanning = true;
mHandler.postDelayed(() -> {
if (mIsScanning) {
showToast("Not able to find any new device.");
stopScan();
}
}, SCAN_DURATION);
}
private void stopScan() {
if (mIsScanning) {
final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
scanner.stopScan(scanCallback);
mIsScanning = false;
closeWaitDialog();
}
private ScanCallback scanCallback = new ScanCallback() {
@Override
public void onScanResult(final int callbackType, final ScanResult result) {
// do nothing
stopScan();
}
@Override
public void onBatchScanResults(final List<ScanResult> results) {
Log.e(TAG, results.toString() + " mIsScanning " + mIsScanning);
if (results.size() == 1) {
stopScan();
ScanResult scanResult = results.get(0);
launchSomeActivity();
} else if (results.size() > 1) {
stopScan();
showToast("Too many new devices. Please scan one device at a time.");
} else {
// Do nothing. As we will stop anyway stop scanning after 5 sec.
}
}
@Override
public void onScanFailed(final int errorCode) {
// should never be called
}
};
모든 도움을 주시면 감사하겠습니다.
내 첫 번째 생각 이었지만 'ScanCallback'의 동일한 인스턴스를 항상 사용하고 있습니다. – tharun
이 조각'개인 ScanCallback scanCallback = 새로운 ScanCallback()'는 그렇지 않으면 말한다. scanCallback을 호출 할 때 ScanCallback의 새 인스턴스를 작성 중입니다. –
변수를 한 번만 선언하고 동일한 인스턴스를 항상 사용합니다. 코드가 조금 혼란 스러울 수 있습니다, scanCallback 변수는 전역 변수이거나 뭔가 빠졌습니다. – tharun