Android BLE編程詳解

Android BLE(Bluetooth Low Energy)是一種低功耗無線連接技術,它允許設備間進行短距離數據交換,能夠在可接受的耗電量下實現長達數月甚至數年的電池壽命。在Android中,使用BLE API可以很方便地實現與BLE設備的交互。

一、Androidble修改連接參數

在BLE設備連接的過程中,我們可以通過修改連接參數來控制連接速度和功耗。Android BLE API提供了多種參數設置方法,可以根據具體需求進行選擇。

1、在Gatt連接後使用setPreferredPhy方法可以設置設備的連接參數和PHY類型。


BluetoothGatt bluetoothGatt;
bluetoothGatt.setPreferredPhy(
                BluetoothDevice.PHY_LE_2M,
                BluetoothDevice.PHY_OPTION_NO_PREFERRED,
                BluetoothDevice.PHY_OPTION_NO_PREFERRED);

2、使用requestConnectionPriority方法可以在連接過程中調整連接優先級。


bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);

二、Androidble修改連接間隔

連接間隔是指BLE設備之間交換數據的時間間隔,該參數設置越小,則連接速度越快,但功耗也會相應地增加。在某些應用場景,需要通過修改連接間隔來控制Android設備與BLE設備之間的通信速度。

1、在Gatt連接後,使用requestMtu方法來設置BLE設備間的最大傳輸單位(MTU)。


bluetoothGatt.requestMtu(512);

2、使用requestConnectionPriority方法可以同時修改連接間隔和連接優先級。

bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);

三、Androidble藍牙搜索 搜不到蘋果

AndroidBLE API在進行搜索BLE設備時,需要確定搜索範圍,這個範圍由搜索條件和搜索時間兩個變量控制。如果搜索範圍內沒有BLE設備,則需要檢查這兩個變量設置是否正確。以下是一些常見的搜索BLE設備的方法。

1、在BluetoothAdapter中設置UUID來搜索指定的BLE設備。


bluetoothAdapter.startLeScan(uuids, mLeScanCallback);

2、使用startScan方法開始BLE設備掃描,當發現BLE設備時回調onScanResult方法。


bluetoothLeScanner.startScan(scanCallback);

3、在進行BLE搜索時,需要注意兩個變量的值:搜索條件和搜索持續時間。


bluetoothLeScanner.startScan(scanCallback);

四、Androidble從理論到實戰 代碼

接下來我們通過一個簡單的實例,來介紹如何在Android BLE應用中進行設備連接和數據交換。

1、連接BLE設備


BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        super.onConnectionStateChange(gatt, status, newState);
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            //連接成功
        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            //連接斷開
        }
    }
};

BluetoothDevice device;
BluetoothGatt gatt = device.connectGatt(context, false, mGattCallback);

2、向BLE設備寫入數據


BluetoothGattCharacteristic characteristic = ...
byte[] data = ...
characteristic.setValue(data);
gatt.writeCharacteristic(characteristic);

3、讀取BLE設備的數據


BluetoothGattCharacteristic characteristic = ...
gatt.readCharacteristic(characteristic);
byte[] data = characteristic.getValue();

4、BLE設備數據通知


BluetoothGattCharacteristic characteristic = ...
gatt.setCharacteristicNotification(characteristic, true);

以上實例只是介紹了BLE設備連接、數據交換的基本流程。在實際應用中,需要根據具體需求進行相應的功能開發和硬件設備開發。

五、Android Ble 從機廣播選取

在BLE設備開發中,可以通過設定廣播數據和廣播間隔來實現BLE設備被Android設備搜索到的功能。以下是一些常見的BLE從機廣播選取方法。

1、指定廣播數據,對外發送BLE設備的標題、廠商信息等設備信息。


byte[] oldData = ...;
byte[] newData = "New Data".getBytes();
System.arraycopy(newData, 0, oldData, 0, newData.length);
advertisingBuilder.setIncludeDeviceName(true);
advertisingBuilder.setManufacturerData(0x0590, newData);
bluetoothLeAdvertiser.startAdvertising(settings, advertisingBuilder.build(), advertisingCallback);

2、指定廣播間隔。


advertisingBuilder.setTimeout(500);
bluetoothLeAdvertiser.startAdvertising(settings, advertisingBuilder.build(), advertisingCallback);

以上是BLE從機廣播的常見選取方法,可以根據實際需求進行設置。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/271597.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 19:22
下一篇 2024-12-16 19:22

相關推薦

  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控件。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27
  • Android Java Utils 可以如何提高你的開發效率

    Android Java Utils 是一款提供了一系列方便實用的工具類的 Java 庫,可以幫助開發者更加高效地進行 Android 開發,提高開發效率。本文將從以下幾個方面對 …

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論