デバイスを見つけたり、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
この部分の 'Private ScanCallback scanCallback = new ScanCallback()'は、そうしないと言います。 scanCallbackを呼び出すときにScanCallbackの新しいインスタンスを作成しています –
私は変数を一度だけ宣言していて、常に同じインスタンスを使用しています。コードが少し混乱しているかもしれませんが、scanCallback変数はグローバル変数か何かが欠けています。 – tharun