للعثور على أجهزة البلوتوث المنخفض الطاقة، يمكنك استخدام
startScan()
. تستغرق هذه الطريقة
ScanCallback
كمَعلمة.
يجب تنفيذ عملية الاستدعاء هذه، لأنّ هذه هي الطريقة التي يتم بها عرض نتائج الفحص.
نظرًا لأن الفحص يستهلك قدرًا كبيرًا من طاقة البطارية، يجب ملاحظة ما يلي:
إرشاداتنا:
- توقّف عن البحث فور العثور على الجهاز المطلوب.
- لا تتصفّح أبدًا بشكل متكرر، واضبُط دائمًا حدًا زمنيًا لعملية الفحص. هو جهاز كانت متاحة في السابق ربما تم نقلها خارج النطاق، ولا تزال عملية الفحص جارية يؤدي إلى استنزاف البطارية.
في المثال التالي، يوفر تطبيق 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(); } };