日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android BLE 蓝牙开发-扫码枪集成

發(fā)布時間:2024/3/26 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android BLE 蓝牙开发-扫码枪集成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  一、藍(lán)牙模式HID與BLE

  當(dāng)掃碼槍與手機(jī)連接時,通常采用的是藍(lán)牙HID(Human Interface Device)模式。本質(zhì)上是一個把掃碼槍作為一個硬件鍵盤,按照鍵盤協(xié)議把掃碼后的結(jié)果逐個輸入到對應(yīng)的控件上。

  優(yōu)點:無需開發(fā)集成,配對就可以立即作為鍵盤輸入使用。可以使用輸入框等組件直接接收掃碼結(jié)果。

  缺點:對非數(shù)字支持不佳,與輸入法相關(guān),在某些時候會觸發(fā)英文聯(lián)想-_-||,與虛擬鍵盤會發(fā)生沖突,連接掃碼槍時需要切換鍵盤輸入法輸入。

  而我們要掃描的標(biāo)簽,不僅有英文,特殊符號,還有中文,因此以HID模式接入的藍(lán)牙掃碼槍,最終是不能滿足要求的。于是重新選型了支持BLE模式的掃碼槍。

  BLE模式掃碼槍

  優(yōu)點:兼容性好,遵循藍(lán)牙協(xié)議,與鍵盤輸入法無關(guān)。更底層,直接返回原始二進(jìn)制數(shù)據(jù)流,方便判定編碼以及進(jìn)行字符編碼轉(zhuǎn)換。

  缺點:需要進(jìn)行原生開發(fā), 處理設(shè)備掃描,連接,數(shù)據(jù)讀寫等操作。

  二、BLE協(xié)議白話

  好在有g(shù)ithub,其中的?BLESSED for Android - BLE made easy 項目,就是一個致力于簡化android上BLE開發(fā)工作的開源庫。但在擼代碼前還是要簡單理解下BLE協(xié)議的主要概念。

  較為重要的兩個東西是Service(服務(wù))?與Characteristic特性,譯為功能可能更好理解),簡而言之,一個設(shè)備可以提供多個服務(wù),每個服務(wù)可以提供多個特性功能,每個服務(wù)及特性對應(yīng)一個UUID

  與設(shè)備的通信通過功能進(jìn)行,每個功能通過Properties(屬性)表明該特性支持讀,寫或者通知

  為了便于理解BLE協(xié)議,推薦下載一個叫做“BLE調(diào)試助手”的APP。下面是APP的截圖。

  

????

? ?

????????截圖演示了如何從一個支持BLE協(xié)議的設(shè)備中讀取電量,不需要提前配對,打開APP掃描到對應(yīng)設(shè)備后,點擊Connect, 隨后列出的就是一堆上面說的Service(服務(wù)),能夠顯示服務(wù)名稱的如“Battery Service”,是根據(jù)UUID的約定取得的。

  如電池服務(wù)為0x180F。點開服務(wù)后是Characteristic,其中的Battery Level(也是UUID約定 0x2A19)的Properties為 READ NOTIFY,表明該特性支持讀取和通知。

  點擊那個下箭頭,點擊讀取,顯示出返回數(shù)據(jù)為0x5D(十進(jìn)制估計九十多:-0)。

  電池服務(wù)是一個在協(xié)議中約定的標(biāo)準(zhǔn)服務(wù),但掃碼槍的似乎不是,我們還需要找到掃碼后,是通過哪個Service的哪個Characteristic進(jìn)行通知的,通過這個工具APP也不難找,注意,要打開那個接受通知數(shù)據(jù)。

  掃碼后會有數(shù)據(jù)顯示,找到之后就可以開始編碼了。

  三、第三方庫? BLESSED for Android?的使用

?  https://github.com/weliem/blessed-android

  下面進(jìn)入具體的擼代碼環(huán)節(jié)

  安裝 gradle file加入

allprojects {repositories {...maven { url 'https://jitpack.io' }} }dependencies {implementation 'com.github.weliem:blessed-android:2.0.6' }

  掃描設(shè)備

BluetoothCentralManager central = new BluetoothCentralManager(AppContext.baseAppContext,bluetoothCentralManagerCallback,new Handler(Looper.getMainLooper())); central.scanForPeripherals();

  bluetoothCentralManagerCallback是掃描回調(diào)方法,重要的有下面三個

//發(fā)現(xiàn)了一個設(shè)備 @Override public void onDiscoveredPeripheral(BluetoothPeripheral peripheral, ScanResult scanResult) //連接設(shè)備 @Override public void onConnectedPeripheral(BluetoothPeripheral peripheral) //設(shè)備斷開 @Override public void onDisconnectedPeripheral(BluetoothPeripheral peripheral, HciStatus status)

  發(fā)現(xiàn)設(shè)備后onDiscoveredPeripheral,連接設(shè)備,停止掃描 。bluetoothPeripheralCallback?為設(shè)備回調(diào),用于接受通知

central.autoConnectPeripheral(peripheral, bluetoothPeripheralCallback); central.stopScan();

  onConnectedPeripheral連接后查詢提供的服務(wù)及特性

Log.i("BLE","onConnectedPeripheral"); List<BluetoothGattService> serviceList = peripheral.getServices(); for (int i = 0; i < serviceList.size(); i++) {Log.i("BLE", "Service: " + serviceList.get(i).getUuid());if(serviceList.get(i).getUuid().toString().equals("6e400001-b5a3-f393-e0a9-e50e24dcca9e")){List<BluetoothGattCharacteristic> list= serviceList.get(i).getCharacteristics();for (int j = 0; j < list.size(); j++) {Log.i("BLE", "Characteristic: " + list.get(j).getUuid());}} }

  onConnectedPeripheral后,對特性開啟通知,接受掃碼結(jié)果,服務(wù)的和特性的UUID,需要對應(yīng)填寫,掃碼結(jié)果是以通知信息返回的。

BluetoothGattCharacteristic currentTimeCharacteristic = peripheral.getCharacteristic(SERVICE_UUID, CURRENT_TIME_CHARACTERISTIC_UUID); if (currentTimeCharacteristic != null) {//開啟通知peripheral.setNotify(currentTimeCharacteristic, true); } //與設(shè)備通信需要創(chuàng)建綁定 boolean bret= peripheral.createBond();

  斷開重連可以在onDisconnectedPeripheral中處理

  接收掃碼結(jié)果 在設(shè)備回調(diào)類 bluetoothPeripheralCallback中的下列方法處理。其中value為掃到的二維碼值?

@Override public void onCharacteristicUpdate(@NonNull BluetoothPeripheral peripheral, @NonNull byte[] value, @NonNull BluetoothGattCharacteristic characteristic, @NonNull GattStatus status)

  另:

  •   中文編碼通常為GBK或者UTF8,需要猜測判斷,最后附了個工具函數(shù)
  •   因為BLE默認(rèn)數(shù)據(jù)包較短,對大量數(shù)據(jù),會拆分多次發(fā)送,onCharacteristicUpdate會被調(diào)用多次,需要將value拼接后,進(jìn)行字符編碼判斷處理。  

isUtf8  

public static Boolean isUtf8(byte[] buffer) {boolean isUtf8 = true;int end = buffer.length;for (int i = 0; i < end; i++) {byte temp = buffer[i];if ((temp & 0x80) == 0) {// 0xxxxxxxcontinue;} else if ((temp & 0xC0) == 0xC0 && (temp & 0x20) == 0) {// 110xxxxx 10xxxxxxif (i + 1 < end && (buffer[i + 1] & 0x80) == 0x80 && (buffer[i + 1] & 0x40) == 0) {i = i + 1;continue;}} else if ((temp & 0xE0) == 0xE0 && (temp & 0x10) == 0) {// 1110xxxx 10xxxxxx 10xxxxxxif (i + 2 < end && (buffer[i + 1] & 0x80) == 0x80 && (buffer[i + 1] & 0x40) == 0&& (buffer[i + 2] & 0x80) == 0x80 && (buffer[i + 2] & 0x40) == 0) {i = i + 2;continue;}} else if ((temp & 0xF0) == 0xF0 && (temp & 0x08) == 0) {// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxxif (i + 3 < end && (buffer[i + 1] & 0x80) == 0x80 && (buffer[i + 1] & 0x40) == 0&& (buffer[i + 2] & 0x80) == 0x80 && (buffer[i + 2] & 0x40) == 0&& (buffer[i + 3] & 0x80) == 0x80 && (buffer[i + 3] & 0x40) == 0) {i = i + 3;continue;}}isUtf8 = false;break;}return isUtf8;}isUtf8

總結(jié)

以上是生活随笔為你收集整理的Android BLE 蓝牙开发-扫码枪集成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜桃av一区 | feel性丰满白嫩嫩hd | 久久精品视频在线免费观看 | 中文字幕免费视频观看 | 日本久久综合网 | 在线欧美日韩国产 | 国产毛片一区二区 | 欧美综合影院 | 欧美精品在线观看 | 亚洲福利一区二区三区 | 一区二区三区免费在线观看视频 | 亚洲www啪成人一区二区麻豆 | 久久免费国产精品 | 99热首页 | 欧美一区二区三区 | 欧美日韩一区二区三区国产精品成人 | 夜夜躁日日躁狠狠久久av | 亚洲国产午夜 | 东北女人av | 中文亚洲字幕 | 在线视频a | 秋霞亚洲 | 99久久精品无码一区二区毛片 | 陪读偷伦初尝小说 | av色成人| 日本少妇吞精囗交视频 | 一级国产特黄bbbbb | 久久精品久久国产 | 伊人网综合在线 | 亚洲人成电影网站 | 五月天中文字幕av | 日韩精品一区二 | 毛片手机在线 | 岛国片在线播放 | 国产精品秘入口18禁麻豆免会员 | www.久久久 | 欧洲精品一区二区三区 | 国产精品九九九 | 999精彩视频 | 美女尿尿网站 | aaa午夜| a天堂中文在线 | 欧美日韩高清在线 | 久久久久久五月天 | 成人免费入口 | 十八禁毛片 | 好吊妞精品视频 | 黄色日b片 | 日韩精品一区二区三区色欲av | 91成人在线 | 两个小y头稚嫩紧窄h文 | 中文字幕乱码中文乱码b站 国产一区二区三区在线观看视频 | 国产成人麻豆免费观看 | 天天天天天天操 | 日韩少妇毛片 | 日本人的性生活视频 | 女人扒开屁股让我添 | 免费a在线观看 | 亚洲性欧美色 | 思思在线视频 | 天天人人 | 制服丝袜天堂网 | 日韩精品久久久久久久电影99爱 | 伊人婷婷久久 | 99久久久成人国产精品 | av最新| 日韩色在线观看 | 国产亚洲AV无码成人网站在线 | 国产亚洲精品久久久久丝瓜 | 国产精品精品久久久 | 能看av的网址 | 99自拍视频在线观看 | 丰满多毛的大隂户视频 | 久久精品无码人妻 | 九色91视频| 国产午夜影院 | 日韩视频在线观看免费 | 久久深夜 | 男人操女人下面视频 | 国产欧美精品一区二区色综合 | 免费黄色入口 | 国产aa大片 | 秋葵视频污 | 中文字幕线人 | av在线官网 | 日本啪啪网 | 成人午夜天 | 国产午夜精品久久久久久久 | 国产一级精品毛片 | 国产精品福利视频 | 天海翼av| 搞黄视频在线观看 | 动漫av网站 | 中文字幕永久视频 | 可以免费在线观看的av | 美女av免费在线观看 | 日韩电影在线观看一区 | 亚洲少妇色 | 懂色一区二区二区av免费观看 |