中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中如何使用FastBle藍牙庫

發布時間:2021-07-12 11:50:58 來源:億速云 閱讀:210 作者:Leah 欄目:移動開發

本篇文章為大家展示了Android中如何使用FastBle藍牙庫,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

FastBle VS 原生Android藍牙API

原生Android的藍牙API使用有點麻煩,要先獲取設備的藍牙適配器,接著注冊廣播來接受藍牙設備信息,用完了還需要將廣播給注銷,相對來說有點麻煩。

不好封裝,可以說是原生Android最讓人痛苦的地方,這是因為原生Android的代碼不是很獨立,與Activity、廣播等相雜糅。市面上的藍牙庫也是少之又少,先看了看BleLib,感覺還是換湯不換藥,用起來一點也不簡潔。

但是FastLib封裝的就很技巧,基本上能把一個操作的粒度控制在一行內,另外,代碼也無需與線程、通知之類的打交道,庫中已經幫我們把這些復雜的東西都做完了。

FastBle的Github項目地址在這,大家可以看看:[FastBle - GitHub](https://github.com/Jasonchenlijian/FastBle  (本地下載)

它的文檔也相對比較完整,大家可以查看官方文檔來使用它:FastBle - Document

FastBle的使用

0x00 申明權限

只要使用到了藍牙,申明權限是必不可少的,FastBle需要的權限如下:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

這里要注意一點,如果Android版本高于6.0,用戶還需要打開位置信息(不光要位置權限,還需要打開位置信息)才能通過藍牙進行掃描。

0x01 初始化與全局配置

初始化需要在庫中任何函數被調用前執行,由于庫使用的是單例模式,只需要初始化一次,在哪里都能使用,建議在onCreate里執行初始化代碼:

BleManager.getInstance().init(getApplication());

全局配置可以緊跟初始化之后執行,當然如果不進行配置也沒有任何關系,每一個選項都有默認值:

BleManager.getInstance()
 .enableLog(true)
 .setReConnectCount(1, 5000)
 .setSplitWriteNum(20)
 .setConnectOverTime(10000)
 .setOperateTimeout(5000);

每一項的詳細信息你都能在官方文檔中找到說明

0x02 打開藍牙

使用FastBle中的BleManager類有很多種方式來打開藍牙,這里推薦使用下面這種方式,這種方式會使線程被阻塞,如果用戶不選擇是否打開藍牙,線程將會暫停執行:

BleManager.getInstance().enableBluetooth();

0x03 掃描設備

打開藍牙之后即可掃描設備,在正式掃描之前,可以自定義掃描規則,像這樣:

BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
 .setServiceUuids(serviceUuids) // 只掃描指定的服務的設備,可選
 .setDeviceName(true, names)  // 只掃描指定廣播名的設備,可選
 .setDeviceMac(mac)   // 只掃描指定mac的設備,可選
 .setAutoConnect(isAutoConnect) // 連接時的autoConnect參數,可選,默認false
 .setScanTimeOut(10000)  // 掃描超時時間,可選,默認10秒;小于等于0表示不限制掃描時間
 .build();

BleManager.getInstance().initScanRule(scanRuleConfig);

在設置規則后,即可開始掃描,像這樣

BleManager.getInstance().scan(new BleScanCallBack() {
 @Override
 public void onScanStarted(boolean success) {
 // 開始掃描的回調
 }

 @Override
 public void onScanning(BleDevice bleDevice) {
 // 掃描到一個之前沒有掃到過的設備的回調
 }

 @Override
 public void onScanFinished(List<BleDevice> scanResultList) {
 // 掃描完成的回調,列表里將不會有重復的設備
 }
});

這幾個回調都是安全的,將會自動返回主線程,所以可以放心使用。

當然,在任何地方,任何時候,你都可以直接使用取消掃描這個函數來停止掃描:

BleManager.getInstance().cancelScan();

0x04 連接設備

在掃描之后,你已經獲取到了一個或多個BleDevice對象,你可以直接使用這些對象向目標設備發起連接,像這樣:

BleManager.getInstance().connect(bleDevice, new BleGattCallback() {
 @Override
 public void onStartConnect() {
 // 開始連接
 }

 @Override
 public void onConnectFail(BleDevice bleDevice, BleException exception) {
  // 連接失敗
 }

 @Override
 public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
  // 連接成功,BleDevice即為所連接的BLE設備
 }

 @Override
 public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
  // 連接中斷,isActiveDisConnected表示是否是主動調用了斷開連接方法
 }
});

上述內容就是Android中如何使用FastBle藍牙庫,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江门市| 钦州市| 同心县| 海盐县| 普陀区| 应城市| 洞头县| 郸城县| 泽州县| 县级市| 太和县| 克东县| 监利县| 晴隆县| 玉树县| 桦南县| 肥西县| 成都市| 博白县| 湖南省| 耒阳市| 鄢陵县| 奉化市| 开化县| 徐州市| 伽师县| 丘北县| 常宁市| 邯郸市| 纳雍县| 常山县| 房产| 新丰县| 横峰县| 财经| 丹寨县| 新乐市| 南宁市| 金门县| 云阳县| 桃园县|