איתור מכשירי BLE

כדי לאתר מכשירי BLE, צריך להשתמש startScan() . השיטה הזו ScanCallback כפרמטר. עליכם להטמיע את הקריאה החוזרת (callback) הזו, כי כך מוחזרות תוצאות הסריקה. הסריקה שדורשת צריכת סוללה גבוהה, ולכן חשוב לשים לב לנקודות הבאות הנחיות:

  • אחרי שמוצאים את המכשיר הרצוי, מפסיקים את הסריקה.
  • אף פעם לא לסרוק בלופ, ותמיד יש להגדיר מגבלת זמן לסריקה. מכשיר היה זמין בעבר, ייתכן שיצא מהטווח וממשיך לסרוק מרוקנת את הסוללה.

בדוגמה הבאה, אפליקציית BLE מספקת פעילות (DeviceScanActivity) כדי לסרוק ולאתר מכשירים ומסכים זמינים של Bluetooth LE אותם ברשימה למשתמש. קטע הקוד הבא מראה איך להפעיל ולהפסיק לסרוק:

Kotlin

private val bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner
private var scanning = false
private val handler = Handler()

// Stops scanning after 10 seconds.
private val SCAN_PERIOD: Long = 10000

private fun scanLeDevice() {
    if (!scanning) { // Stops scanning after a pre-defined scan period.
        handler.postDelayed({
            scanning = false
            bluetoothLeScanner.stopScan(leScanCallback)
        }, SCAN_PERIOD)
        scanning = true
        bluetoothLeScanner.startScan(leScanCallback)
    } else {
        scanning = false
        bluetoothLeScanner.stopScan(leScanCallback)
    }
}

Java

private BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
private boolean scanning;
private Handler handler = new Handler();

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;

private void scanLeDevice() {
    if (!scanning) {
        // Stops scanning after a predefined scan period.
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                scanning = false;
                bluetoothLeScanner.stopScan(leScanCallback);
            }
        }, SCAN_PERIOD);

        scanning = true;
        bluetoothLeScanner.startScan(leScanCallback);
    } else {
        scanning = false;
        bluetoothLeScanner.stopScan(leScanCallback);
    }
}

כדי לסרוק רק סוגים ספציפיים של ציוד היקפי, אפשר להתקשר startScan(List<ScanFilter>, ScanSettings, ScanCallback) מספקת רשימה של ScanFilter שמגבילים את המכשירים שהסריקה מחפשת אובייקט ScanSettings מציין פרמטרים שקשורים לסריקה.

דוגמת הקוד הבאה היא הטמעה של ScanCallback שהוא הממשק המשמש להצגת תוצאות של סריקת BLE. כשהתוצאות נמצאות, הם נוספים למתאם רשימה ב-DeviceScanActivity כדי להציג משתמש.

Kotlin

private val leDeviceListAdapter = LeDeviceListAdapter()
// Device scan callback.
private val leScanCallback: ScanCallback = object : ScanCallback() {
    override fun onScanResult(callbackType: Int, result: ScanResult) {
        super.onScanResult(callbackType, result)
        leDeviceListAdapter.addDevice(result.device)
        leDeviceListAdapter.notifyDataSetChanged()
    }
}

Java

private LeDeviceListAdapter leDeviceListAdapter = new LeDeviceListAdapter();

// Device scan callback.
private ScanCallback leScanCallback =
        new ScanCallback() {
            @Override
            public void onScanResult(int callbackType, ScanResult result) {
                super.onScanResult(callbackType, result);
                leDeviceListAdapter.addDevice(result.getDevice());
                leDeviceListAdapter.notifyDataSetChanged();
            }
        };