Tôi hiện đang sử dụng api BLE mới trong phát triển Android.onBatchScanResults không được gọi trong Android BLE
Ý tưởng cơ bản là sử dụng kết quả quét bluetooth để tăng cường recyclerview (danh sách);
Tôi làm theo các BLE guide trên google phát triển
Bây giờ tôi có hai vấn đề: 1. onBatchScanResults
người nghe không bao giờ được kích hoạt, nhưng onScanResult
hoạt động tốt, là vì các máy quét chỉ cảm nhận 1 cảm biến lân cận?
- Máy quét BLE của tôi chậm hơn nhiều so với các ứng dụng khác.
Sau đây là đoạn mã hai chức năng cốt lõi.
private void scanBLE(boolean enable) {
final BluetoothLeScanner mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
if (enable) {
mScanning = true;
mBluetoothLeScanner.startScan(mScanCallback);
} else {
if (mScanning) {
mScanning = false;
mBluetoothLeScanner.stopScan(mScanCallback);
}
}
Log.i(TAG, "now the scanning state is" + mScanning);
}
// Device scan callback.
private ScanCallback mScanCallback =
new ScanCallback() {
public void onScanResult(int callbackType, android.bluetooth.le.ScanResult result) {
addBeaconTolist(result, beaconsList);
mAdapter.notifyDataSetChanged();
};
public void onScanFailed(int errorCode) {
Log.i(TAG, "error code is:" + errorCode);
};
public void onBatchScanResults(java.util.List<android.bluetooth.le.ScanResult> results) {
Log.i(TAG, "event linstener is called!!!!");
Log.i(TAG, "batch result are:" + results);
beaconsList.clear();
for (int i = 0; i < results.size(); i++) {
ScanResult result = results.get(i);
addBeaconTolist(result, beaconsList);
}
mAdapter.notifyDataSetChanged();
};
};
trong MainFragment là như sau:
beaconsList = new ArrayList<BeaconsInfo>();
mAdapter = new BeaconsAdapter(beaconsList);
mRecyclerView.setAdapter(mAdapter);
scannBLE(true);
tôi có cần sử dụng flushPendingScanResults() để nhận kết quả quét theo lô không? – Haven
Không, điều đó chỉ cần thiết nếu bạn muốn nhận hàng sớm. Nếu bạn chỉ cần chờ đợi, bạn sẽ nhận được nó khi hệ điều hành quyết định gửi nó. – davidgyoung
Tôi có câu hỏi cơ bản sau khi đọc blog của bạn, thao tác quét này có chạy trong nền không? hoặc một dịch vụ là cần thiết để thực hiện công việc đó? @davidgyoung – Haven