BLE ডিভাইস খুঁজুন

BLE ডিভাইস খুঁজে পেতে, আপনি startScan() পদ্ধতি ব্যবহার করুন। এই পদ্ধতিটি একটি প্যারামিটার হিসাবে একটি ScanCallback নেয়। আপনাকে অবশ্যই এই কলব্যাকটি বাস্তবায়ন করতে হবে, কারণ এভাবেই স্ক্যানের ফলাফল ফিরে আসে। যেহেতু স্ক্যানিং ব্যাটারি-নিবিড়, আপনার নিম্নলিখিত নির্দেশিকাগুলি পালন করা উচিত:

  • যত তাড়াতাড়ি আপনি পছন্দসই ডিভাইস খুঁজে পেতে, স্ক্যান করা বন্ধ করুন।
  • লুপে কখনই স্ক্যান করবেন না এবং সবসময় আপনার স্ক্যানে একটি সময়সীমা সেট করুন। একটি ডিভাইস যা আগে উপলব্ধ ছিল তা হয়ত সীমার বাইরে চলে গেছে এবং স্ক্যান করতে থাকলে ব্যাটারি নষ্ট হয়ে যায়।

নিম্নলিখিত উদাহরণে, BLE অ্যাপটি উপলব্ধ ব্লুটুথ LE ডিভাইসগুলির জন্য স্ক্যান করার জন্য একটি কার্যকলাপ ( DeviceScanActivity ) প্রদান করে এবং ব্যবহারকারীর কাছে সেগুলিকে একটি তালিকায় প্রদর্শন করে। নিম্নলিখিত স্নিপেট দেখায় কিভাবে একটি স্ক্যান শুরু এবং বন্ধ করতে হয়:

কোটলিন

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 একটি তালিকা অ্যাডাপ্টারে সেগুলি যোগ করা হয়।

কোটলিন

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