저전력 블루투스 기기 찾기

저전력 블루투스 기기를 찾으려면 startScan() 드림 메서드를 사용하여 축소하도록 요청합니다. 이 메서드는 ScanCallback을 매개변수로 사용합니다. 이 콜백을 통해 스캔 결과가 반환되므로 반드시 구현해야 합니다. 스캔은 배터리를 많이 사용하므로 다음 사항에 유의해야 합니다. 가이드라인:

  • 원하는 기기를 찾는 즉시 스캔을 중단합니다.
  • 루프에서 스캔하지 말고 항상 스캔에 시간 제한을 설정하세요. 이전에 사용할 수 있었던 항목이 범위를 벗어났을 수 있으며 배터리가 소모됩니다.

다음 예에서 BLE 앱은 (DeviceScanActivity)를 통해 사용 가능한 블루투스 저전력 기기 및 디스플레이 검색 사용자에게 제공할 수 있습니다 다음 스니펫은 스캔:

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)
    }
}

자바

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()
    }
}

자바

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();
            }
        };