亚州天堂爱爱,做爱视频国产全过程在线观看,成人试看30分钟免费视频,女人无遮挡裸交性做爰视频网站

? ? ?

安卓藍牙開發基礎知識教程(安卓藍牙開發流程)

簡介:

藍牙4.0分為標準藍牙和低功耗藍牙(BLE),標準藍牙就是手機上用的那種,低功耗藍牙由于其具有最大化的待機時間、快速連接和低峰值的發送和接收特性,被廣泛用于智能手表、智能手環等可穿戴設備上。在安卓4.3之前,安卓平臺上的BLE開發相當難搞,好在谷歌在4.3之后發布了官方的API。在安卓5.0之后又引入了新的API,原來的API已經被廢棄。在新的系統里采用舊API開發的APP仍可使用,但采用新API開發的APP只能在Lollipop(Android 5.0 的前身蘿莉版(Lollipop) Android 開發者預覽)即安卓5.0及其以后的版本使用。

安卓藍牙開發基礎知識教程(安卓藍牙開發流程)

標準藍牙的的開發和BLE不同。標準藍牙連接里有兩個角色一個是客戶端一個是服務器,當客戶端搜索到藍牙服務器后并與之配對后,才能通過UUID(這個是唯一的,服務器端必須與客戶端一致)建立socket,然后使用流像文件讀寫和網絡通信那樣傳輸數據就行了。在BLE里,變成了中心設備(central)和外圍設備(peripheral),中心設備就是你的手機,外圍設備就是智能手環一類的東西。開發BLE的應用都得遵守Generic Attribute Profile (GATT),一個BLE藍牙設備包含多個service,每個service又包含多個characteristic。每個characteristic有一個value和多個descriptor,通過characteristic中心設備與外圍設備進行通信。descriptor顧名思義,包含了BLE設備的一些信息。不同service、characteristic和descriptor都有各自己唯一的UUID。想要跟BLE設備通信,首先通過UUID獲取目標服務,然后再通過UUID獲取characteristic,charateristic起著載體的作用,通過writeCharacteristic()和readCharacteristic(),可以寫入和讀出信息。每個characteristic都有一些自己的屬性,其中在property里,說明了該characteristic的屬性。

權限:

<!– 使用藍牙的權限 –>

<uses-permission android:name=\”android.permission.BLUETOOTH\” />

<!– 掃描藍牙設備或者操作藍牙設置 –>

<uses-permission android:name=\”android.permission.BLUETOOTH_ADMIN\” />

<!–模糊定位權限,僅作用于6.0 ,需要動態申請權限–>

<uses-permission android:name=\”android.permission.ACCESS_COARSE_LOCATION\” />

<!–精準定位權限,僅作用于6.0 ,需要動態申請權限–>

<uses-permission android:name=\”android.permission.ACCESS_FINE_LOCATION\” />

掃描方式

Android官方提供的藍牙掃描方式有三種,分別是:

BluetoothAdapter.startDiscovery()//可以掃描經典藍牙和ble藍牙兩種

BluetoothAdapter.startLeScan()//掃描低功耗藍牙,在api21已經棄用,不過還是可以使用

BluetoothLeScanner.startScan()//新的ble掃描方法

startDiscovery()方法在大多數手機上是可以同時發現經典藍牙和低功耗藍牙(BLE)的,但是startDiscovery()的回調無法返回BLE的廣播,所以無法通過廣播識別設備,而且startDiscovery()掃描BLE效率比startLeScan()低很多。因此需要根據具體的需求去做適配,才能更高效的搜尋藍牙。PS: startLeScan()和startScan()有重載方法可以指定規則,參數去搜索。

BluetoothLeScanner bluetoothLeScanner=BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();

getBluetoothLeScanner()方法需要@SuppressLint(\”NewApi\”)注解,此時使用這個方法就需要開發者對版本進行區分,從而選擇不同的掃描方式。

藍牙操作:

可使用第三方庫有:

僅適用于BLE設備:https://github.com/Jasonchenlijian/FastBle

藍牙操作庫:https://github.com/a-voyager/BluetoothHelper

調試藍牙可用app:

蘋果版本的是:LightBlue

安卓版本的是:BLE調試工具,BLEDebugger這兩個都可在華為應用商城下載得到。

藍牙接收和寫入數據的類型:

FastBle第三方庫:

藍牙接收到的數據是十進制的字節數組,寫入時需要傳入的也是十進制的字節數組。

HexUtil.formatHexString(data,true);該方法是將十進制的字節數組,轉化成十六進制的字符串,其第一個參數是:十進制字節數組;第二個參數是:每個字節轉換后是否帶有空格。

方法一:

/**

* 將Java 中的 int 數值轉為字節數組

* @return

*/

public static byte[] int2Bytes(int x,ByteOrder byteOrder) {

ByteBuffer buffer = ByteBuffer.allocate(4);

buffer.order(byteOrder);

buffer.putInt(x);

return buffer.array();

}

方法二:

/**

* 將字節數組轉為 Java 中的 int 數值

* @return

*/

public static int bytes2Int(byte[] src,ByteOrder byteOrder){

ByteBuffer buffer = ByteBuffer.wrap(src);

buffer.order(byteOrder);

return buffer.getInt();

}

以上兩個方法;是十進制字節數組和int之間的轉換。byteOrder參數是字節序參數。

字節序說明:BIG-ENDIAN—-大字節序;LITTLE-ENDIAN—-小字節序;BIG-ENDIAN就是最低地址存放最高有效字節;LITTLE-ENDIAN是最低地址存放最低有效字節;java字節序:JAVA虛擬機中多字節類型數據的存放順序,JAVA字節序也是BIG-ENDIAN。

開發中遇到這樣的數據類型:int32_t、uint8_t、uint16_t。這樣的數據類型是c語言中用到的,其都是int類型,只是所占用的字節不同而已。

int32_t:4個字節

uint8_t:1個字節

uint16_t:2個字節

遇到這樣類型的數值時,我們要將其轉換為java中的int(4個字節)值,就需要用到上面的方法二。那么像uint8_t和uint16_t不足4個字節時,就要根據字節序來補零。

比如:一個字節,大端序方式,轉成java的int值

byte[] chars=new byte[4];

chars[0]= (byte) 0;

chars[1]= (byte) 0;

chars[2]= (byte) 0;

chars[3]=data[40];

configAnalogInputBean.setLower_alarm_hysteresis(CommonUtil.bytes2Int(chars, ByteOrder.BIG_ENDIAN) \”\”);

這里就涉及到java中int和byte之間的轉化:

int i=150;

byte bi=(byte)150;//正確

int ibi=bi>=0?bi:256 bi;//正確。說明:int強制轉換為byte型數據時,會產生一個-128~127的有符號字節,所以再把byte轉換到int時,需要做這樣的處理。

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2024年9月14日 下午12:01
下一篇 2024年9月14日 下午12:13

相關推薦