日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android-Ble蓝牙通讯开发–扫描,连接,发送和接收数据,分包解包(附源码)

發布時間:2023/12/16 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android-Ble蓝牙通讯开发–扫描,连接,发送和接收数据,分包解包(附源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

萬物互聯的物聯網時代的已經來臨,ble藍牙開發在其中扮演著舉重若輕的角色。最近剛好閑一點,抽時間梳理下這塊的知識點。

涉及ble藍牙通訊的客戶端(開啟、掃描、連接、發送和接收數據、分包解包)和服務端(初始化廣播數據、開始廣播、配置Services、Server回調操作)整個環節以及一些常見的問題即踩過的一些坑。

比如
1、在Android不同版本或不同手機的適配問題,掃描不到藍牙設備
2、如何避免ble藍牙連接出現133錯誤?
3、單次寫的數據大小有20字節限制,如何發送長數據

藍牙有傳統(經典)藍牙和低功耗藍牙BLE(Bluetooth Low Energy)之分,兩者的開發的API不一樣,本文主講Ble藍牙開發,傳統藍牙不展開,有需要的可以自行了解。

相對傳統藍牙,BLE低功耗藍牙,主要特點是快速搜索,快速連接,超低功耗保持連接和數據傳輸。

Demo效果展示


客戶端

服務端

API

Android4.3(API Level 18)開始引入BLE的核心功能并提供了相應的 API。應用程序通過這些 API 掃描藍牙設備、查詢 services、讀寫設備的 characteristics(屬性特征)等操作。

BLE藍牙協議是GATT協議, BLE相關類不多, 全都位于android.bluetooth包和android.bluetooth.le包的幾個類:
android.bluetooth.
.BluetoothGattService 包含多個Characteristic(屬性特征值), 含有唯一的UUID作為標識
.BluetoothGattCharacteristic 包含單個值和多個Descriptor, 含有唯一的UUID作為標識
.BluetoothGattDescriptor 對Characteristic進行描述, 含有唯一的UUID作為標識

.BluetoothGatt 客戶端相關
.BluetoothGattCallback 客戶端連接回調
.BluetoothGattServer 服務端相關
.BluetoothGattServerCallback 服務端連接回調

android.bluetooth.le.
.AdvertiseCallback 服務端的廣播回調
.AdvertiseData 服務端的廣播數據
.AdvertiseSettings 服務端的廣播設置
.BluetoothLeAdvertiser 服務端的廣播

.BluetoothLeScanner 客戶端掃描相關(Android5.0新增)
.ScanCallback 客戶端掃描回調
.ScanFilter 客戶端掃描過濾
.ScanRecord 客戶端掃描結果的廣播數據
.ScanResult 客戶端掃描結果
.ScanSettings 客戶端掃描設置

BLE設備分為兩種設備: 客戶端(也叫主機/中心設備/Central), 服務端(也叫從機/外圍設備/peripheral)
客戶端的核心類是 BluetoothGatt
服務端的核心類是 BluetoothGattServer 和 BluetoothLeAdvertiser
BLE數據的核心類是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

下面詳細講解下客戶端和服務端的開發步驟流程

一、BLE客戶端開發流程

1、申請權限

安卓手機涉及藍牙權限問題,藍牙開發需要在AndroidManifest.xml文件中添加權限聲明:

<!-- 藍牙權限 --> <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" /> 手機權限管理中允許此權限,否則會出現無法搜索到設備的情況;BLE權限增加了BEL支持檢查 (1).在manifest中添加權限 <!-- true 表示手機必須支持BLE,否則無法安裝!這里設為false, 運行后在Activity中檢查--> <uses-featureandroid:name="android.hardware.bluetooth_le"android:required="false" />(2).Activity中設置藍牙 // 檢查是否支持BLE藍牙 if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {Util.toast(this, "本機不支持低功耗藍牙!");finish();return; }

2、打開藍牙

在搜索設備之前需要詢問打開手機藍牙:

//獲取系統藍牙適配器管理類 private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // 詢問打開藍牙 if (mBluetoothAdapter != null && !mBluetoothAdapter.isEnabled()) {Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, 1); }// 申請打開藍牙請求的回調 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode == 1) {if (resultCode == RESULT_OK) {Toast.makeText(this, "藍牙已經開啟", Toast.LENGTH_SHORT).show();} else if (resultCode == RESULT_CANCELED) {Toast.makeText(this, "沒有藍牙權限", Toast.LENGTH_SHORT).show();finish();}} }

3、搜索設備

注意: BLE設備地址是動態變化(每隔一段時間都會變化),而經典藍牙設備是出廠就固定不變了!

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // 下面使用Android5.0新增的掃描API,掃描返回的結果更友好,比如BLE廣播數據以前是byte[] scanRecord,而新API幫我們解析成ScanRecord類\ final BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); bluetoothLeScanner.startScan(mScanCallback); mHandler.postDelayed(new Runnable() {@Overridepublic void run() {bluetoothLeScanner.stopScan(mScanCallback); //停止掃描isScanning = false;} }, 3000);// 掃描結果Callback private final ScanCallback mScanCallback = new ScanCallback() {@Overridepublic void onScanResult(int callbackType, ScanResult result) {BluetoothDevice dev = result.getDevice() 獲取BLE設備信息// result.getScanRecord() 獲取BLE廣播數據} };// 舊API是BluetoothAdapter.startLeScan(LeScanCallback callback)方式掃描BLE藍牙設備,如下: mBluetoothAdapter.startLeScan(callback); private LeScanCallback callback = new LeScanCallback() {@Overridepublic void onLeScan(BluetoothDevice device, int arg1, byte[] arg2) {//device為掃描到的BLE設備if(device.getName() == "目標設備名稱"){//獲取目標設備targetDevice = device;}} };

4、連接設備

通過掃描BLE設備,根據設備名稱區分出目標設備targetDevice,下一步實現與目標設備的連接,在連接設備之前要停止搜索藍牙;停止搜索一般需要一定的時間來完成,最好調用停止搜索函數之后加以100ms的延時,保證系統能夠完全停止搜索藍牙設備。停止搜索之后啟動連接過程;

BLE藍牙的連接方法相對簡單只需調用connectGatt方法;

public BluetoothGatt connectGatt (Context context, boolean autoConnect, BluetoothGattCallback callback)

參數說明

  • 返回值 BluetoothGatt: BLE藍牙連接管理類,主要負責與設備進行通信;
  • boolean autoConnect:建議置為false,能夠提升連接速度;
  • BluetoothGattCallback callback 連接回調,重要參數,BLE通信的核心部分;

5、設備通信

與設備建立連接之后與設備通信,整個通信過程都是在BluetoothGattCallback的異步回調函數中完成;

BluetoothGattCallback中主要回調函數如下:

private BluetoothGattCallback gattCallback = new BluetoothGattCallback() {@Overridepublic void onConnectionStateChange(BluetoothGatt gatt, int status,int newState) {//連接狀態改變的Callback}@Overridepublic void onServicesDiscovered(BluetoothGatt gatt, int status) {//服務發現成功的Callback}@Overridepublic void onCharacteristicWrite(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic, int status) {//寫入Characteristic}@Overridepublic void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {//讀取Characteristic }@Overridepublic void onCharacteristicChanged(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic) {//通知Characteristic}@Overridepublic void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {//寫入Descriptor}@Overridepublic void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {//讀取Descriptor}};

上述幾個回調函數是BLE開發中不可缺少的;

6、等待設備連接成功

當調用targetdDevice.connectGatt(context, false, gattCallback)后系統會主動發起與BLE藍牙設備的連接,若成功連接到設備將回調onConnectionStateChange方法,其處理過程如下:

@Override public void onConnectionStateChange(BluetoothGatt gatt, int status,int newState) {if (newState == BluetoothGatt.STATE_CONNECTED) {Log.e(TAG, "設備連接上 開始掃描服務");// 連接成功后,開始掃描服務mBluetoothGatt.discoverServices();}if (newState == BluetoothGatt.STATE_DISCONNECTED) {// 連接斷開/*連接斷開后的相應處理*/ } };

判斷newState == BluetoothGatt.STATE_CONNECTED表明此時已經成功連接到設備;

7、開啟掃描服務

mBluetoothGatt.discoverServices();

掃描BLE設備服務是安卓系統中關于BLE藍牙開發的重要一步,一般在設備連接成功后調用,掃描到設備服務后回調onServicesDiscovered()函數,函數原型如下:

@Override public void onServicesDiscovered(BluetoothGatt gatt, int status) {private List<BluetoothGattService> servicesList;//獲取服務列表servicesList = mBluetoothGatt.getServices(); }
  • BLE藍牙協議下數據的通信方式采用BluetoothGattService、BluetoothGattCharacteristic和BluetoothGattDescriptor三個主要的類實現通信;
  • BluetoothGattService 簡稱服務,是構成BLE設備協議棧的組成單位,一個藍牙設備協議棧一般由一個或者多個BluetoothGattService組成;
  • BluetoothGattCharacteristic 簡稱特征,一個服務包含一個或者多個特征,特征作為數據的基本單元;
  • 一個BluetoothGattCharacteristic特征包含一個數據值和附加的關于特征的描述;
  • BluetoothGattDescriptor:用于描述特征的類,其同樣包含一個value值;

8、獲取負責通信的BluetoothGattCharacteristic

BLE藍牙開發主要有負責通信的BluetoothGattService完成的。當且稱為通信服務。通信服務通過硬件工程師提供的UUID獲取。獲取方式如下:

  • BluetoothGattService service = mBluetoothGatt.getService(UUID.fromString(“藍牙模塊提供的負責通信UUID字符串”));
  • 通信服務中包含負責讀寫的BluetoothGattCharacteristic,且分別稱為notifyCharacteristic和writeCharacteristic。其中notifyCharacteristic負責開啟監聽,也就是啟動收數據的通道,writeCharacteristic負責寫入數據;

具體操作方式如下:

BluetoothGattService service = mBluetoothGatt.getService(UUID.fromString("藍牙模塊提供的負責通信服務UUID字符串"));// 例如形式如:49535343-fe7d-4ae5-8fa9-9fafd205e455notifyCharacteristic = service.getCharacteristic(UUID.fromString("notify uuid"));writeCharacteristic = service.getCharacteristic(UUID.fromString("write uuid"));

9、開啟監聽

開啟監聽,即建立與設備的通信的首發數據通道,BLE開發中只有當客戶端成功開啟監聽后才能與服務端收發數據。開啟監聽的方式如下:

mBluetoothGatt.setCharacteristicNotification(notifyCharacteristic, true) BluetoothGattDescriptor descriptor = characteristic .getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); //若開啟監聽成功則會回調BluetoothGattCallback中的onDescriptorWrite()方法,處理方式如下: @Override public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {//開啟監聽成功,可以向設備寫入命令了Log.e(TAG, "開啟監聽成功");} };

10、寫入數據

BLE單次寫的數據量大小是有限制的,通常是20字節,可以嘗試通過requestMTU增大,但不保證能成功。分包寫是一種解決方案,需要定義分包協議,假設每個包大小20字節,分兩種包,數據包和非數據包。對于數據包,頭兩個字節表示包的序號,剩下的都填充數據。對于非數據包,主要是發送一些控制信息。
監聽成功后通過向 writeCharacteristic寫入數據實現與服務端的通信。寫入方式如下:

//value為客戶端向服務端發送的指令 writeCharacteristic.setValue(value); mBluetoothGatt.writeCharacteristic(writeCharacteristic)

其中:value一般為Hex格式指令,其內容由設備通信的藍牙通信協議規定;

11、接收數據

若寫入指令成功則回調BluetoothGattCallback中的onCharacteristicWrite()方法,說明將數據已經發送給下位機;

@Override public void onCharacteristicWrite(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {Log.e(TAG, "發送成功");} }

若發送的數據符合通信協議,則服務端會向客戶端回復相應的數據。發送的數據通過回調onCharacteristicChanged()方法獲取,其處理方式如下:

@Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {// value為設備發送的數據,根據數據協議進行解析byte[] value = characteristic.getValue(); }

通過向服務端發送指令獲取服務端的回復數據,即可完成與設備的通信過程;

12、斷開連接

當與設備完成通信之后之后一定要斷開與設備的連接。調用以下方法斷開與設備的連接:

mBluetoothGatt.disconnect(); mBluetoothGatt.close();

二、BLE服務端開發流程

1、設置廣播以及初始化廣播數據

//廣播設置(必須) AdvertiseSettings settings = new AdvertiseSettings.Builder().setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY) //廣播模式: 低功耗,平衡,低延遲.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH) //發射功率級別: 極低,低,中,高.setTimeout(0).setConnectable(true) //能否連接,廣播分為可連接廣播和不可連接廣播.build();//廣播數據(必須,廣播啟動就會發送) AdvertiseData advertiseData = new AdvertiseData.Builder().setIncludeDeviceName(true) //包含藍牙名稱.setIncludeTxPowerLevel(true) //包含發射功率級別.addManufacturerData(1, new byte[]{23, 33}) //設備廠商數據,自定義.build();//掃描響應數據(可選,當客戶端掃描時才發送) AdvertiseData scanResponse = new AdvertiseData.Builder().addManufacturerData(2, new byte[]{66, 66}) //設備廠商數據,自定義.addServiceUuid(new ParcelUuid(UUID_SERVICE)) //服務UUID // .addServiceData(new ParcelUuid(UUID_SERVICE), new byte[]{2}) //服務數據,自定義.build();

2、開始廣播

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); //BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter(); BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// ============啟動BLE藍牙廣播(廣告) =============== mBluetoothLeAdvertiser = bluetoothAdapter.getBluetoothLeAdvertiser(); mBluetoothLeAdvertiser.startAdvertising(settings, advertiseData, scanResponse, mAdvertiseCallback);// BLE廣播Callback private AdvertiseCallback mAdvertiseCallback = new AdvertiseCallback() {@Overridepublic void onStartSuccess(AdvertiseSettings settingsInEffect) {logTv("BLE廣播開啟成功");}@Overridepublic void onStartFailure(int errorCode) {logTv("BLE廣播開啟失敗,錯誤碼:" + errorCode);} };

3、配置Services以及Characteristic

// 注意:必須要開啟可連接的BLE廣播,其它設備才能發現并連接BLE服務端! // =============啟動BLE藍牙服務端====================================== BluetoothGattService service = new BluetoothGattService(UUID_SERVICE, BluetoothGattService.SERVICE_TYPE_PRIMARY);//添加可讀+通知characteristic BluetoothGattCharacteristic characteristicRead = new BluetoothGattCharacteristic(UUID_CHAR_READ_NOTIFY,BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_NOTIFY, BluetoothGattCharacteristic.PERMISSION_READ); characteristicRead.addDescriptor(new BluetoothGattDescriptor(UUID_DESC_NOTITY, BluetoothGattCharacteristic.PERMISSION_WRITE)); service.addCharacteristic(characteristicRead);//添加可寫characteristic BluetoothGattCharacteristic characteristicWrite = new BluetoothGattCharacteristic(UUID_CHAR_WRITE, BluetoothGattCharacteristic.PROPERTY_WRITE, BluetoothGattCharacteristic.PERMISSION_WRITE); service.addCharacteristic(characteristicWrite);if (bluetoothManager != null){mBluetoothGattServer = bluetoothManager.openGattServer(this, mBluetoothGattServerCallback); }mBluetoothGattServer.addService(service);

4、Server回調以及操作

/** * 服務事件的回調 */ private BluetoothGattServerCallback mBluetoothGattServerCallback= new BluetoothGattServerCallback() {/*** 1.連接狀態發生變化時*/@Overridepublic void onConnectionStateChange(BluetoothDevice device, int status, int newState) {Log.e(TAG, String.format("1.onConnectionStateChange:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("1.onConnectionStateChange:status = %s, newState =%s ", status, newState));}@Overridepublic void onServiceAdded(int status, BluetoothGattService service) {Log.e(TAG, String.format("onServiceAdded:status = %s", status));}@Overridepublic void onCharacteristicReadRequest(BluetoothDevice device, int requestId, int offset, BluetoothGattCharacteristic characteristic) {Log.e(TAG, String.format("onCharacteristicReadRequest:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("onCharacteristicReadRequest:requestId = %s, offset = %s", requestId, offset));mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, characteristic.getValue());}/*** 3. onCharacteristicWriteRequest,接收具體的字節*/@Overridepublic void onCharacteristicWriteRequest(BluetoothDevice device, int requestId, BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean responseNeeded, int offset, byte[] requestBytes) {Log.e(TAG, String.format("3.onCharacteristicWriteRequest:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("3.onCharacteristicWriteRequest:requestId = %s, preparedWrite=%s, responseNeeded=%s, offset=%s, value=%s", requestId, preparedWrite, responseNeeded, offset, requestBytes.toString()));mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, requestBytes);//4.處理響應內容onResponseToClient(requestBytes, device, requestId, characteristic);}/*** 2.描述被寫入時,在這里執行 bluetoothGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS... 收,觸發 onCharacteristicWriteRequest*/@Overridepublic void onDescriptorWriteRequest(BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) {Log.e(TAG, String.format("2.onDescriptorWriteRequest:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("2.onDescriptorWriteRequest:requestId = %s, preparedWrite = %s, responseNeeded = %s, offset = %s, value = %s,", requestId, preparedWrite, responseNeeded, offset, value.toString()));// now tell the connected device that this was all successfullmGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, value);}/*** 5.特征被讀取。當回復響應成功后,客戶端會讀取然后觸發本方法*/@Overridepublic void onDescriptorReadRequest(BluetoothDevice device, int requestId, int offset, BluetoothGattDescriptor descriptor) {Log.e(TAG, String.format("onDescriptorReadRequest:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("onDescriptorReadRequest:requestId = %s", requestId));mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, null);}@Overridepublic void onNotificationSent(BluetoothDevice device, int status) {super.onNotificationSent(device, status);Log.e(TAG, String.format("5.onNotificationSent:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("5.onNotificationSent:status = %s", status));}@Overridepublic void onMtuChanged(BluetoothDevice device, int mtu) {super.onMtuChanged(device, mtu);Log.e(TAG, String.format("onMtuChanged:mtu = %s", mtu));}@Overridepublic void onExecuteWrite(BluetoothDevice device, int requestId, boolean execute) {super.onExecuteWrite(device, requestId, execute);Log.e(TAG, String.format("onExecuteWrite:requestId = %s", requestId));} };/** * 4.處理響應內容 * * @param reqeustBytes * @param device * @param requestId * @param characteristic */ private void onResponseToClient(byte[] reqeustBytes, BluetoothDevice device, int requestId, BluetoothGattCharacteristic characteristic) {Log.e(TAG, String.format("4.onResponseToClient:device name = %s, address = %s", device.getName(), device.getAddress()));Log.e(TAG, String.format("4.onResponseToClient:requestId = %s", requestId));Log.e(TAG, "4.收到:");String str = new String(reqeustBytes) + " hello>";characteristicRead.setValue(str.getBytes());mGattServer.notifyCharacteristicChanged(device, characteristicRead, false);Log.i(TAG, "4.響應:" + str);MainActivity.handler.obtainMessage(MainActivity.DEVICE, new String(reqeustBytes)).sendToTarget(); }

三、源碼下載

源碼上傳在CSDN上了,有需要的可以借鑒。

=====> Android藍牙Ble通訊Demo示例源碼–掃描,連接,發送和接收數據,分包解包

四、藍牙操作的注意事項

1、如何避免ble藍牙連接出現133錯誤?

  • Android 連接外圍設備的數量有限,當不需要連接藍牙設備的時候,必須調用 BluetoothGatt#close 方法釋放資源;
  • 藍牙 API 連接藍牙設備的超時時間大概在 20s 左右,具體時間看系統實現。有時候某些設備進行藍牙連接的時間會很長,大概十多秒。如果自己手動設置了連接超時時間在某些設備上可能會導致接下來幾次的連接嘗試都會在 BluetoothGattCallback#onConnectionStateChange 返回 state == 133;
  • 能否避免android設備與ble設備連接/斷開時上報的133這類錯誤?
    1、在連接失敗或者斷開連接之后,調用 close 并刷新緩存
    2、盡量不要在startLeScan的時候嘗試連接,先stopLeScan后再去連
    3、對同一設備斷開后再次連接(連接失敗重連),哪怕調用完close,需要等待一段時間(400毫秒試了1次,結果不 行;1000毫秒則再沒出現過問題)后再去connectGatt
    4、可以在連接前都startLeScan一下,成功率要高一點

2、單次寫的數據大小有20字節限制,如何發送長數據?

BLE單次寫的數據量大小是有限制的,通常是20字節,可以嘗試通過requestMTU增大,但不保證能成功。分包寫是一種解決方案,需要定義分包協議,假設每個包大小20字節,分兩種包,數據包和非數據包。對于數據包,頭兩個字節表示包的序號,剩下的都填充數據。對于非數據包,主要是發送一些控制信息。
總體流程如下:
1、定義通訊協議,如下(這里只是個舉例,可以根據項目需求擴展)

消息號(1個字節)功能(1個字節)子功能(1個字節)數據長度(2個字節)數據內容(N個字節)CRC校驗(1個字節)
01010100002D

2、封裝通用發送數據接口(拆包)
該接口根據會發送數據內容按最大字節數拆分(一般20字節)放入隊列,拆分完后,依次從隊列里取出發送

3、封裝通用接收數據接口(組包)
該接口根據從接收的數據按協議里的定義解析數據長度判讀是否完整包,不是的話把每條消息累加起來

4、解析完整的數據包,進行業務邏輯處理

5、協議還可以引入加密解密,需要注意的選算法參數的時候,加密后的長度最好跟原數據長度一致,這樣不會影響拆包組包

3、在Android不同版本或不同的手機掃描不到藍牙設備

一般都是Android版本適配以及不同ROM機型(小米/紅米、華為/榮耀等)(EMUI、MIUI、ColorOS等)的權限問題

4、其它

  • 藍牙的寫入操作, 讀取操作必須序列化進行. 寫入數據和讀取數據是不能同時進行的, 如果調用了寫入數據的方法, 馬上調用又調用寫入數據或者讀取數據的方法,第二次調用的方法會立即返回 false, 代表當前無法進行操作;

總結

藍牙開發中有很多問題,要靜下心分析問題,肯定可以解決的,一起加油;

總結

以上是生活随笔為你收集整理的Android-Ble蓝牙通讯开发–扫描,连接,发送和接收数据,分包解包(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲激情婷婷 | 久草视频国产 | 日韩欧美高清 | 国产99久久久国产精品 | 91超国产 | 色综合网在线 | 日韩午夜一级片 | 天天综合91 | 久久精品爱视频 | 日本不卡久久 | 久久手机看片 | 美女视频网站久久 | 久久涩涩网站 | 国产精品私人影院 | 欧美a性 | 99国产精品一区二区 | 精品国产美女在线 | 亚洲精品成人在线 | 国产 日韩 欧美 自拍 | 亚洲男男gaygay无套 | 综合精品在线 | 91完整版在线观看 | 国产精品va视频 | 国产一区二区精品久久91 | 伊人国产在线观看 | 久久久久综合网 | 婷婷伊人综合 | 国内精品久久久久影院一蜜桃 | 久久久久久福利 | 伊人官网 | 国产裸体无遮挡 | avav99| 草久久久 | 久久久久久久久久毛片 | 天天操天天爱天天爽 | 久久精品国产免费看久久精品 | 五月婷婷综合在线 | a天堂在线看| 欧美一区二区在线刺激视频 | 免费在线观看不卡av | 国产区久久| 久久久久成| 日韩,精品电影 | 欧美在线一 | av在线电影网站 | 精品国偷自产在线 | av网站在线观看免费 | 蜜臀精品久久久久久蜜臀 | 日韩精品中文字幕在线播放 | 成人久久精品视频 | 性色av一区二区 | 日韩伦理片一区二区三区 | 国产视频一区在线免费观看 | 日韩二区三区在线观看 | 国产精品久久久久aaaa | 成人a视频 | 欧美日韩在线免费观看 | 国产成人久 | 嫩草av在线 | 欧美在线一二区 | 久久久久久久久久久影视 | 日韩精品免费一区 | 99国产精品一区 | av免费线看 | 精品人人人人 | 久久久午夜精品理论片中文字幕 | 日韩免费高清 | 欧美日韩视频在线观看一区二区 | 五月婷婷丁香 | 国产对白av | 婷婷色网址 | 免费看av在线 | 成人中文字幕在线观看 | 久久高清av | 色婷婷电影 | 国产91全国探花系列在线播放 | 九九免费在线看完整版 | 中文字幕 在线看 | 丁香婷婷激情国产高清秒播 | 一区二区三区日韩精品 | 九九热在线视频免费观看 | 99精品视频免费看 | 亚洲免费精品视频 | 在线免费观看国产黄色 | 国产精品美女久久久久久久 | 国产丝袜美腿在线 | 国产精品嫩草影院99网站 | 欧美日韩视频精品 | 2020天天干夜夜爽 | 亚洲视频免费在线 | 国产精品一区电影 | 一级黄色免费网站 | 日韩免费精品 | 亚洲黄色免费 | 天天色天天射天天操 | 精品1区2区 | 九九激情视频 | 黄色免费高清视频 | 国产精品视频一二三 | 久久精品久久综合 | www.看片网站 | 99久久久国产精品 | 999日韩| 成人黄色在线观看视频 | 一区二区三区中文字幕在线 | 五月天狠狠操 | 六月丁香激情网 | 亚洲一区尤物 | 最新av在线播放 | 91视频这里只有精品 | 亚洲精品久久激情国产片 | 国产中文字幕大全 | 国产成人精品国内自产拍免费看 | 国产成人精品久久二区二区 | 999精品 | 在线免费三级 | 中日韩欧美精彩视频 | 狠狠色噜噜狠狠狠狠 | 欧美一级电影片 | 视频在线国产 | 日日夜夜狠狠 | 亚洲成av人片在线观看 | 久久久久久久久久福利 | 免费91麻豆精品国产自产在线观看 | 粉嫩高清一区二区三区 | 中午字幕在线观看 | 欧美日在线观看 | 国内精品久久久久久久影视麻豆 | 91精品国产福利 | 国产精品自在欧美一区 | 久久草网| 超碰com| 91精品在线免费视频 | 在线亚洲精品 | 欧美日韩性视频在线 | 欧美黑人巨大xxxxx | 麻豆高清免费国产一区 | 精品视频久久 | 欧美少妇xxxxxx | 中文字幕在线观看91 | 免费av小说 | 国产夫妻av在线 | 婷婷电影在线观看 | 在线 国产一区 | 在线黄色毛片 | 国产精品综合av一区二区国产馆 | 日韩在线视频网 | 五月激情久久久 | 黄色成人小视频 | 国产天天爽 | 成人一级免费电影 | 国产99久久 | 成年人免费看片网站 | 女人18片毛片90分钟 | 激情视频久久 | 色无五月| 国产 一区二区三区 在线 | 亚洲精品美女在线观看 | 国产欧美精品xxxx另类 | 日韩在线观看一区二区三区 | 精品国产精品国产偷麻豆 | 在线亚洲观看 | 亚洲欧美在线视频免费 | 久久精品亚洲精品国产欧美 | 中文免费 | 婷婷丁香综合 | 在线观看理论 | 国产99久久精品 | 久久99久国产精品黄毛片入口 | 99综合电影在线视频 | 人人澡人人干 | 久久一二三四 | 天天天干天天天操 | 国产精品成人久久久 | 青春草免费在线视频 | 一本一本久久a久久精品综合小说 | 2022中文字幕在线观看 | 91片黄在线观看动漫 | 欧美日韩午夜 | 国产精品99久久免费观看 | 国产精品综合久久久久 | 成人在线播放视频 | 亚州欧美精品 | 在线免费精品视频 | 麻豆视频在线免费观看 | 2021av在线 | 欧美日韩精品在线一区二区 | 久久久久久久av麻豆果冻 | 天天草天天摸 | 色播五月激情五月 | 精品国产精品国产偷麻豆 | 九九热有精品 | 蜜桃视频色 | 久草视频在线资源站 | 日韩av视屏在线观看 | 在线观看日本韩国电影 | 欧美日韩视频一区二区三区 | 91亚洲精品久久久 | 久久久久99999 | 五月激情六月丁香 | 国产手机视频精品 | 亚洲激色 | 天天舔夜夜操 | 亚洲午夜精品久久久久久久久久久久 | 中文字幕在线网址 | 在线成人中文字幕 | 99精品区 | www免费看| 久草在 | 在线观看你懂的网站 | 亚洲精品国产综合久久 | av千婊在线免费观看 | 亚洲成人精品久久久 | 国产精品爽爽久久久久久蜜臀 | 欧美一级看片 | 天天操天天谢 | 色综合久| 丁香九月婷婷综合 | 亚洲欧美日韩国产一区二区三区 | 久久综合久久八八 | 中文在线a∨在线 | 国产专区视频在线观看 | 欧美日韩国产一区二区在线观看 | 精品国产乱码久久久久久浪潮 | 美女视频黄是免费的 | 91视频免费网站 | 国产九色视频在线观看 | 九色精品| www五月天com| 91免费在线视频 | 超碰97人 | 97超碰超碰久久福利超碰 | 国产资源在线视频 | 四季av综合网站 | 97在线免费观看 | 人人揉人人揉人人揉人人揉97 | 欧美日韩在线播放一区 | 国产精品第10页 | 在线黄色av电影 | 午夜少妇 | 欧美午夜久久 | www.看片网站 | 久久久久伦理电影 | 四虎在线免费观看 | 国产91精品看黄网站在线观看动漫 | 久久久免费精品 | 日韩有码网站 | 国产一级片久久 | av先锋中文字幕 | 欧美日韩高清在线 | 九九涩涩av台湾日本热热 | 午夜久久久精品 | 四虎影视精品永久在线观看 | 在线精品观看 | 在线免费观看黄色av | 天天干天天插 | 麻豆系列在线观看 | 亚洲视频电影在线 | 国产精品系列在线 | 亚洲午夜不卡 | 色天天综合久久久久综合片 | 狠狠躁日日躁夜夜躁av | 亚洲伊人色 | 日韩一区二区三免费高清在线观看 | 精品国产人成亚洲区 | 欧美亚洲国产一卡 | 免费观看一级 | 天天操天天摸天天射 | 亚洲精品黄 | 国产精品2018 | av一区二区三区在线播放 | 亚洲欧美激情精品一区二区 | 99久久99久久免费精品蜜臀 | 日韩中文幕| 午夜少妇 | 黄色一级在线视频 | www激情com | 少妇自拍av | 久久精品久久久久久久 | japanese黑人亚洲人4k | 在线观看911视频 | 91精品国产一区二区三区 | 丁香六月婷婷开心婷婷网 | av爱干 | 日韩三级免费观看 | 国产精久久久 | 精品国产一区二区三区在线 | 色综合天天 | 在线观看视频一区二区三区 | 青青河边草手机免费 | 国产精品久久久久四虎 | 91亚洲国产成人久久精品网站 | 一区二区三区高清不卡 | 国产999精品久久久 免费a网站 | 色国产精品 | 精品在线亚洲视频 | 国产高清成人av | 国产亚洲精品久久19p | 欧美国产视频在线 | 亚洲一区二区高潮无套美女 | 超碰免费久久 | 国产精品久久久网站 | 亚洲第一久久久 | 天天伊人狠狠 | 欧美久久99 | 久草视频在线新免费 | 国产色妞影院wwwxxx | 夜夜夜精品 | 国产高清在线观看 | 天天色天天干天天色 | 色国产精品一区在线观看 | 欧美日韩免费一区二区 | 成人精品亚洲 | 激情五月婷婷激情 | 国产日韩精品一区二区三区在线 | 中文字幕在线视频网站 | 免费看片成年人 | www色网站| 久久午夜视频 | 91成人免费观看视频 | 国产精品久久久久一区二区 | 成人久久久精品国产乱码一区二区 | 国产日产精品久久久久快鸭 | 日韩欧美在线视频一区二区 | 在线 国产一区 | 玖草影院 | 亚洲国产一区在线观看 | 色婷婷啪啪免费在线电影观看 | 久久精品一区二区 | 99热九九这里只有精品10 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久草在线高清视频 | 亚洲黄色一级电影 | 麻豆va一区二区三区久久浪 | 国产精品免费一区二区三区在线观看 | 国产精品美女www爽爽爽视频 | 99久久99久久精品国产片 | 久久成人福利 | 亚洲精品成人av在线 | 亚洲欧美在线观看视频 | 久要激情网 | 国产手机精品视频 | 欧美亚洲另类在线视频 | 天天舔天天搞 | 欧美人人 | 一区二区亚洲精品 | 日韩欧美精品在线 | 一区在线电影 | 中文字幕观看av | 有码视频在线观看 | 综合色婷婷| 国产在线观看,日本 | 在线天堂中文在线资源网 | 天干啦夜天干天干在线线 | 欧美影院久久 | av韩国在线 | 五月天色站 | 中文字幕字幕中文 | 涩涩资源网 | 国产91粉嫩白浆在线观看 | 激情网站五月天 | 天堂在线免费视频 | 国产高清av免费在线观看 | 狠狠色狠狠色合久久伊人 | 永久精品视频 | 日韩欧美在线综合网 | 人人爱人人射 | 国产精品久久久久久久久久久不卡 | 欧美日韩有码 | 日本中文字幕系列 | av成人动漫 | 国产91学生粉嫩喷水 | 91精品国产综合久久久久久久 | 中文字幕在线看视频国产中文版 | 国产精品s色 | 免费观看成年人视频 | 9999在线 | 国产99久久久欧美黑人 | 日韩视频免费在线 | 9在线观看免费高清完整 | 欧美日本不卡视频 | 国产色区 | 经典三级一区 | 欧美一级在线观看视频 | 国产91成人 | 欧美一区二区三区在线看 | 天天操夜操 | 丰满少妇在线观看资源站 | 992tv在线观看 | 中文字幕一区在线观看视频 | 亚洲色五月 | 91| 中文字幕免费观看视频 | 久久综合综合久久综合 | 成年人网站免费在线观看 | 在线观看免费观看在线91 | 精品久久久久免费极品大片 | 婷婷久久综合九色综合 | 亚洲va天堂va欧美ⅴa在线 | 日韩成人在线免费观看 | 日韩在线观看中文 | 特级大胆西西4444www | 日本精品一区二区三区在线观看 | 在线观看av免费 | www.91成人 | www.国产在线观看 | 日本在线成人 | 国产精品video爽爽爽爽 | 97超碰在线播放 | 国产成人精品久久二区二区 | 国产精品亚 | 黄av在线| 日本精品二区 | 国产精品一区二区免费看 | 久久伦理视频 | 99精品视频在线观看免费 | 久久精品欧美一区二区三区麻豆 | 中文字幕亚洲不卡 | 91污在线观看 | 米奇狠狠狠888 | 99视频在线观看视频 | 天天色天天射天天干 | 久久精品99久久久久久2456 | 超碰在线中文字幕 | 日韩免费视频 | 国产精品成人一区二区三区 | 国产色秀视频 | 日韩欧美在线免费 | 最近中文字幕免费av | 一级黄色片在线免费看 | 国产在线高清精品 | 色a综合| 色综合久久网 | 啪啪免费试看 | 久久精品中文字幕免费mv | 在线观看中文字幕一区 | 日韩中文字幕免费在线观看 | 中文字幕在线播放一区 | 夜夜躁狠狠躁日日躁 | 中日韩免费视频 | 国产打女人屁股调教97 | 精品亚洲免费视频 | 天天操天天舔天天爽 | 中文字幕高清在线 | 日韩欧美网址 | 久久综合久久综合这里只有精品 | 激情影院在线 | 亚洲年轻女教师毛茸茸 | 欧美一区二区在线免费观看 | 中文av在线免费观看 | 伊人天天色 | 中文字幕av最新更新 | 亚洲情婷婷 | 99精品免费视频 | 亚洲极色 | 国产美女精品 | 久久国产免费视频 | 免费看片成人 | 少妇bbw搡bbbb搡bbb | 日韩欧美视频在线 | 91色在线观看视频 | 国产精品久久久av | 首页中文字幕 | 亚洲精品在线二区 | 韩国av一区二区三区 | 天天操夜夜操国产精品 | 亚洲激色 | 久久国产精品一区二区 | 夜夜操天天操 | 日韩激情一二三区 | 99国产免费网址 | 久久久久久久久影院 | 免费涩涩网站 | 国产精品黄 | www.神马久久 | 国产粉嫩在线观看 | 亚洲va男人天堂 | 午夜精品区 | 国产在线精品国自产拍影院 | 天天拍天天色 | 99视频在线观看视频 | 中文字幕日韩国产 | 久久黄网站 | 高清精品视频 | 欧美日韩亚洲一 | 一级一级一片免费 | 欧美综合在线视频 | 久久久九色精品国产一区二区三区 | 又黄又爽的免费高潮视频 | 久久久www成人免费精品 | 亚洲va欧洲va国产va不卡 | 高潮久久久久久久久 | 一级片黄色片网站 | 亚洲精品婷婷 | 久久伦理网 | 国产精品欧美久久久久三级 | 天天摸日日操 | 亚洲在线成人精品 | 免费又黄又爽 | 欧美日韩综合在线 | 日韩精品一区二区三区免费观看 | 国产精品久久久久久久久久久久午夜片 | 国际精品网 | 精品毛片一区二区免费看 | 天天天天色射综合 | 日韩av线观看 | 国产精品国产三级国产aⅴ无密码 | 亚洲成人黄色在线 | 国产网站av | 三级黄色大片在线观看 | 黄色一级在线观看 | 久久久久亚洲精品成人网小说 | 欧美淫视频 | 国产色在线 | 国产96在线观看 | 91九色性视频 | 日韩欧美在线观看一区 | 国产中文字幕三区 | 久久精品中文字幕 | 天天插天天狠天天透 | 亚洲国产精品va在线 | 久草在线免费电影 | 日韩精品免费一区二区 | 亚洲综合激情网 | 六月色丁 | 91入口在线观看 | 国产福利资源 | 欧美国产日韩在线观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 久久久久久久国产精品影院 | 一区二区三区电影 | 欧美aⅴ在线观看 | 韩国av一区二区三区在线观看 | 中文字幕高清视频 | 国产精品99免费看 | 性色xxxxhd| 日本黄色免费播放 | 欧美日韩一区二区三区视频 | 国产精品久久久久久久妇 | 国产小视频在线 | 91资源在线免费观看 | 不卡国产视频 | 91视频午夜| 免费看av在线 | 欧美91视频 | 欧美a级免费视频 | 国产精品乱码一区二三区 | 在线不卡a | 亚洲精品字幕在线 | 毛片基地黄久久久久久天堂 | 97超碰色 | 中文字幕精品久久 | 亚洲国产高清在线观看视频 | 久久毛片网 | 国产精品18久久久久vr手机版特色 | 在线中文字母电影观看 | 日韩乱码中文字幕 | 韩国视频一区二区三区 | a黄色大片| 丁香六月伊人 | 久草91视频 | 午夜999 | 国产成人精品区 | 国产精品久久亚洲 | 综合激情 | 久久欧美综合 | 五月天婷婷视频 | 四虎最新域名 | 久久99免费视频 | 欧美国产在线看 | 日韩在线视频看看 | 久久精品国产免费看久久精品 | 精品在线一区二区 | 亚洲h在线播放在线观看h | 高清av网站 | 这里有精品在线视频 | 精品99999| 欧美性视频网站 | 97爱爱爱 | 在线午夜电影神马影院 | 欧美一区日韩精品 | 三级毛片视频 | 三级性生活视频 | 成人福利在线观看 | 日韩视频一区二区 | 久久a久久 | 国产三级在线播放 | 国产人免费人成免费视频 | 中文字幕91视频 | 国产女人免费看a级丨片 | 久色小说| 欧美先锋影音 | 亚洲精品九九 | 国产精品网站一区二区三区 | 中文字幕激情 | 丁香五婷 | 欧美日韩国产一区二区三区 | 婷婷色在线视频 | 中文字幕在线网址 | 91女子私密保健养生少妇 | 国产精品美女在线 | av福利第一导航 | 涩涩网站在线看 | 中文字幕在线观看免费 | 欧美乱淫视频 | 国产精品破处视频 | 久久综合狠狠 | 亚洲精品一区二区在线观看 | 中文字幕在线观看视频一区二区三区 | 999电影免费在线观看2020 | 国产免费黄视频在线观看 | 狠狠色丁婷婷日日 | 色偷偷88888欧美精品久久 | 国产老太婆免费交性大片 | 国产福利中文字幕 | 国产精品系列在线观看 | 激情偷乱人伦小说视频在线观看 | 99热在线这里只有精品 | 久久www免费视频 | 丁香久久综合 | 国产精品 视频 | 午夜 在线 | 一区二区三区在线观看免费视频 | 国产精品h在线观看 | 天天插天天狠天天透 | 在线观看你懂的网站 | 日三级在线 | 亚州欧美视频 | 久久亚洲区| 五月婷婷激情五月 | 免费色视频网站 | 91精品国产欧美一区二区成人 | 亚洲欧美日韩国产一区二区三区 | 国产精品久久嫩一区二区免费 | 国产真实精品久久二三区 | 中文字幕婷婷 | 久草视频免费在线观看 | 亚洲欧洲国产精品 | 国产91成人在在线播放 | 麻豆国产在线视频 | 成年人免费看av | 免费网站在线观看人 | 欧美天天干 | 综合色播 | 日韩欧美有码在线 | 97国产大学生情侣酒店的特点 | 91在线视频观看 | 亚洲色视频 | 99精品视频免费观看视频 | a在线免费 | 中文字幕视频在线播放 | 免费观看一级 | 99久久久成人国产精品 | 国产午夜一区 | 人人爽人人香蕉 | 国产精品免费看久久久8精臀av | 91完整版| 欧美日韩不卡一区二区 | 日韩久久久久久久 | 伊人看片| 日韩免费 | 99精品久久久 | 激情小说网站亚洲综合网 | 亚洲 欧美 另类人妖 | 91精品国自产在线 | 久久经典国产视频 | 国产精品a成v人在线播放 | 日免费视频 | 91最新中文字幕 | 草久视频在线 | 色欧美成人精品a∨在线观看 | 天天插日日射 | 亚洲视频一区二区三区在线观看 | 337p日本欧洲亚洲大胆裸体艺术 | 国内精品久久久久久中文字幕 | 欧美日韩1区 | 久久最新网址 | 久久精品人人做人人综合老师 | av大片免费看 | 男女靠逼app | 亚欧洲精品视频在线观看 | 久久在线看| 亚洲闷骚少妇在线观看网站 | 欧美无极色 | 成人免费网站视频 | 国产成人精品午夜在线播放 | 亚洲精品高清在线观看 | 久久久噜噜噜久久久 | 国产精品日韩久久久久 | 欧美日韩三级 | 五月天久久 | 久久男人免费视频 | 91免费视频国产 | 日本一区二区不卡高清 | 99成人精品 | 91精品啪在线观看国产线免费 | 国产色在线视频 | 久久高清国产视频 | 国产成人一级 | 午夜精品99久久免费 | 国产精品网红福利 | 午夜精品福利一区二区 | 激情网站网址 | 成人久久久久久久久 | 免费黄色在线网址 | 免费高清无人区完整版 | 香蕉视频在线看 | 色偷偷男人的天堂av | 久久综合五月 | 亚洲精品国产麻豆 | 三级av免费观看 | www.亚洲视频.com | 西西大胆啪啪 | av一本久道久久波多野结衣 | 国产精品区在线观看 | 久久久久久久久久久福利 | 五月天亚洲综合小说网 | 国产婷婷精品 | 欧美精品资源 | 中文字幕在线观看免费观看 | 91免费试看 | 亚洲视频 在线观看 | 国产精品一区二区免费 | 97超碰色| 日日弄天天弄美女bbbb | 久草精品视频 | 狠狠婷婷| 国产精品久久久久久吹潮天美传媒 | 国产伦理久久精品久久久久_ | 国产日韩欧美在线观看视频 | 成人毛片a | 国产小视频福利在线 | 久草在线综合网 | 最近日本mv字幕免费观看 | 精品欧美在线视频 | 国产破处精品 | 日韩免费播放 | 在线小视频你懂得 | av免费在线看网站 | 国产精品成人免费精品自在线观看 | 国产精品片 | 最新日韩精品 | 亚洲欧洲一区二区在线观看 | 亚洲成av片人久久久 | 超碰av免费 | 97视频在线观看免费 | 欧美经典久久 | 国产高清专区 | 亚洲天堂精品视频在线观看 | 精品美女久久久久 | 欧美亚洲专区 | 国产在线视频不卡 | 亚洲精品乱码久久久久久按摩 | 免费观看www7722午夜电影 | 亚洲久草网| 久草在线播放视频 | 97超碰精品 | 久久精品综合一区 | 操久| 国产首页 | 亚洲精品一区中文字幕乱码 | 国产精品成人久久 | 久久综合亚洲鲁鲁五月久久 | 美女网站在线播放 | 成人av网站在线观看 | 国产区久久 | 欧美 日韩 国产 中文字幕 | 亚洲精品小区久久久久久 | 99re8这里有精品热视频免费 | 天天草天天操 | 六月丁香激情综合 | 色资源在线 | 亚洲精品乱码久久久久久蜜桃欧美 | 精品国产伦一区二区三区观看方式 | av播放在线| 国产五月婷婷 | 天天射夜夜爽 | 激情影音先锋 | 西西44人体做爰大胆视频 | 日精品 | 久久精品这里热有精品 | 亚洲激情校园春色 | 中文字幕久久久精品 | 天天搞天天干天天色 | 国产成人久 | 精品国产一区二区三区在线 | 久久视频免费在线观看 | 九九综合久久 | 久久国色夜色精品国产 | 欧美日韩亚洲一 | 国产精品九九久久久久久久 | 国产免费一区二区三区最新 | 一区二区三区四区影院 | av韩国在线| 人人爱爱| 国产精品久久久久永久免费 | 色噜噜在线观看视频 | 成人免费在线观看入口 | av在线短片 | 丁香久久 | 91香蕉亚洲精品 | 国产精品久久久久久久久久妇女 | 久久99精品久久久久久三级 | 91热| 国产精品一区在线观看你懂的 | 麻豆传媒视频在线播放 | 国产精品成人免费精品自在线观看 | 久草视频在 | 成人小电影在线看 | 香蕉久草在线 | 国产69久久| 欧美日韩在线免费观看 | 成人午夜影院 | 亚洲少妇xxxx | 在线视频日韩欧美 | 国产成人综合图片 | 国产剧情一区二区 | 日韩在线观看视频一区二区三区 | 久久精品视 | 婷婷在线免费 | aaa日本高清在线播放免费观看 | 99久久精品免费看国产麻豆 | 91在线永久| 国产精品美女久久久久久久 | 91免费观看视频在线 | 97视频资源| 国产精品手机播放 | 日韩av电影国产 | 久久免费视频在线观看6 | av在线免费观看不卡 | 91精品视频网站 | 日韩欧美视频一区 | 色吧久久 | 天天综合操 | 99爱国产精品 | www日韩高清 | 亚洲精品在线视频网站 | 亚洲精品在线免费观看视频 | 欧美激情视频一区二区三区免费 | 黄色毛片电影 | 国产一级视频在线免费观看 | 狠狠色丁香婷婷综合久久片 | 一区在线免费观看 | 韩国av三级 | 亚洲综合在线播放 | 免费又黄又爽的视频 | 欧美一性一交一乱 | 激情综合色综合久久综合 | 成人av电影免费观看 | 国产精品久久久久久999 | 国产一区视频在线观看免费 | 国产午夜亚洲精品 | 在线日韩av | 久久99久国产精品黄毛片入口 | 国产你懂的在线 | 日韩电影黄色 | 欧美久久综合 | 成人在线免费观看网站 | 96看片 | 国产在线精品一区二区不卡了 | 黄色一级免费网站 | 国产成人免费观看久久久 | 婷婷新五月 | 亚洲精品国产视频 | 欧美日韩中文国产一区发布 | 岛国大片免费视频 | 日日干日日操 | 国产精品嫩草影视久久久 | 国产不卡在线播放 | 欧美日韩午夜爽爽 | 色av色av色av | 久久久综合 | 欧美性生活免费 | 四虎成人精品永久免费av | 视频二区在线 | 久久久精品在线观看 | 亚洲欧洲日韩在线观看 | 丁香五月亚洲综合在线 | 国产精品久久久久久久久久免费看 | 在线观看韩日电影免费 | av一区二区三区在线播放 | 美女视频黄免费 | 精品国产乱码 | 69精品| 国产精品一区二区久久 | 免费看搞黄视频网站 | 久爱综合 | 国内精品久久久 | 婷婷色伊人 | 免费在线a | 国产在线播放一区 | 81国产精品久久久久久久久久 | 久久久久久久久国产 | 中文字幕4 | 特级西西444www大精品视频免费看 | 三上悠亚一区二区在线观看 | 色欧美成人精品a∨在线观看 | 在线成人小视频 | 中文字幕首页 | 成人在线网站观看 | 六月丁香在线观看 | 国产精品尤物 | 成年人在线免费看片 | 国产精品第一页在线 | 啪啪免费试看 | 99久久精品网 | 国产999免费视频 | 日韩精品一区二区在线视频 | 99超碰在线播放 | 99在线热播精品免费 | 国产99久久九九精品免费 | 又黄又色又爽 | 久艹在线免费观看 | 天天操天 | 国产欧美精品xxxx另类 | 在线看片视频 | 97天天干 | 日本少妇高清做爰视频 | 成人三级网站在线观看 | 欧美午夜激情网 | 国产精品免费麻豆入口 | 麻豆影视在线观看 | av福利资源 | av综合网址 | www久久精品| 久久精品久久久久久久 | 久久视频精品在线观看 | 久久免费视频在线观看30 | 欧美电影黄色 | 成人av在线播放网站 | 亚洲欧美怡红院 | 国内精品久久久久久中文字幕 | 狠狠色伊人亚洲综合成人 | 人人揉人人揉人人揉人人揉97 | 欧美日韩视频在线播放 | 成人h动漫在线看 | 狠狠色丁香| 五月婷婷六月丁香激情 | 亚洲天天干 | 在线观看免费色 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 久久网址 | 9999精品免费视频 | 精品av网站 | 中文一区二区三区在线观看 | 久久99视频精品 | 色黄www小说 | 午夜精品一二三区 | 成人国产精品久久久久久亚洲 | 色停停五月天 | 精品久久国产一区 | 二区三区在线视频 | 久久超级碰视频 | 夜夜躁日日躁狠狠久久av | www.久久99| 91大神免费在线观看 | aaawww| 久久久久国产一区二区三区 | 在线观看网站黄 | 亚洲精品99久久久久中文字幕 | 色噜噜日韩精品欧美一区二区 | 性色av免费在线观看 | 在线观看日韩一区 | www.香蕉视频在线观看 | 免费看片网站91 | 久久激情视频 | 国产综合精品一区二区三区 | 亚洲专区免费观看 | 色综合久久88| 射九九| 久久视频99| 欧美aa级| 激情视频二区 | 精品国产乱码久久久久久久 | 国产99久久久国产精品 | 日韩69视频 | 亚洲区精品 | 日日夜夜网 | 又色又爽的网站 | 国产高清不卡一区二区三区 | av噜噜噜在线播放 | 国产精品入口66mio女同 | 在线免费色 | av在线免费播放网站 | 国产色 在线 | 国产成人一区二区三区免费看 | 五月婷婷激情综合 | 99精品欧美一区二区蜜桃免费 | 欧美婷婷综合 | 亚洲成av人片在线观看无 | 视频三区 | 在线观看va | 在线观看国产日韩 | 成年人视频在线观看免费 | 免费av在线网 | 国产精品久久久久av福利动漫 | 国产精品毛片一区二区在线 | 友田真希x88av |