Java 我想知道BLE gatt类回调设置的完成时间

Java 我想知道BLE gatt类回调设置的完成时间,java,android,bluetooth,bluetooth-lowenergy,gatt,Java,Android,Bluetooth,Bluetooth Lowenergy,Gatt,我的英语不好。请理解 我想知道蓝牙设置何时完成。我想在蓝牙连接和设置完成后向设备发送数据。我如何知道流打开何时完成 当我尝试所有BLE设置时,我只睡了几秒钟,但我想将其更改为顺序代码 私有类GattClientCallback扩展了BluetoothGattCallback{ @凌驾 发现服务上的公共无效(蓝牙gatt,国际状态){ super.onServicesDiscovered(_gatt,_status); //检查发现是否失败 如果(_status!=BluetoothGatt.GA

我的英语不好。请理解

我想知道蓝牙设置何时完成。我想在蓝牙连接和设置完成后向设备发送数据。我如何知道流打开何时完成

当我尝试所有BLE设置时,我只睡了几秒钟,但我想将其更改为顺序代码

私有类GattClientCallback扩展了BluetoothGattCallback{
@凌驾
发现服务上的公共无效(蓝牙gatt,国际状态){
super.onServicesDiscovered(_gatt,_status);
//检查发现是否失败
如果(_status!=BluetoothGatt.GATT_SUCCESS){
Log.e(标签,“设备服务发现失败,状态:”+_status);
返回;
}
//发现发现的特征
列表匹配特征=BluetoothUtils.findBLECharacteristics(_gatt);
if(匹配_characteristics.isEmpty()){
Log.e(标签“无法找到特征”);
返回;
}
//成功发现的日志
Log.d(标记“服务发现成功”);
//从GATT服务器查找命令特征
cmd\u characteristic=BluetoothUtils.findCommandCharacteristic(ble\u gatt);
//setCharacteristicNotification
ble_gatt_uu.setCharacteristicNotification(cmd_characteristic,true);
BluetoothGattDescriptor descriptor=cmd\u characteristic.getDescriptor(characteristic\u UPDATE\u NOTIFICATION\u descriptor\u UUID);
描述符.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
ble_gatt_uu.writeDescriptor(描述符);//描述符写入操作已成功启动?
//流打开完成。
//更新连接状态消息
msg_handler(设置_TV_状态,“连接完成”);
}
}
String result=pref.getString(“第一个设备”,“0”);
如果(结果等于(“0”)){
ble_info.startScan();
}否则{
ble_info.connectSavedDevice();
}
分组睡眠(5000)//我必须在连接完成后发送数据。
如果(!ble_信息已连接){
返回;
}
while(ble_info.connected&&state_check!=ACK_COMM_START){
ble_info.sendData(设置通信开始);
分组睡眠(确认项);
}
ble_信息类

公共类蓝牙信息{
受保护的静态最终整数集\电视\状态=0;
受保护的静态最终int SET_TV_连接=1;
受保护的静态最终UUID特性\更新\通知\描述符\ UUID=UUID.fromString(“00002902-0000-1000-8000-00805f9b34fb”);
受保护的静态PacketReceive PacketReceive=新PacketReceive();
//-------------------------------
//mac地址
公共字符串地址;
//可编程适配器
公共蓝牙适配器ble_u适配器;;
//扫描标志
公共布尔值为\u扫描\u=false;
//连接标志
公共布尔连接=false;
//扫描结果
公共地图扫描结果;
//扫描回调
公共扫描回调扫描\u cb;
//可编程扫描仪
公共蓝牙扫描仪;
//扫描处理器
公共处理程序扫描\u处理程序\u;
//关税及贸易总协定
公共蓝牙关税及贸易总协定;
蓝牙特征cmd_特征;
//保存数据
共享参考优先;
SharedReferences.Editor;
//建造师
BluetoothInfo(BluetoothManager ble_manager,共享参考优先){
ble_适配器=ble_管理器.getAdapter();
ble_scanner_uu=ble_适配器_uu.getBluetoothLeScanner();
//保存数据
this.pref=pref;
}
@RequiresApi(api=Build.VERSION\u CODES.M)
公共无效startScan(){
//检查是否存在位置权限
if(context.checkSelfPermission(Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u provided){
requestLocationPermission();
Log.d(标记“扫描失败:无精细位置许可”);
返回;
}
//断开gatt服务器
断开GATTSERVER()的连接;
扫描\处理程序\新处理程序();
扫描\处理程序\后延迟(此::停止扫描,扫描\期间);
扫描结果=新建HashMap();
scan\u cb\uu=新的BLEScanCallback(扫描结果);
Log.d(标记“扫描…”);
//检查ble适配器并启用ble
如果(ble_适配器==null | |!ble_适配器u.isEnabled()){
requestEnable();
Log.d(标记“扫描失败:未启用ble”);
返回;
}
//现在准备好扫描了吗
ble_scanner_uu.startScan(扫描);//扫描过滤器사용x
//设置扫描标志
是否为u扫描u=真;
}
/*
停止扫描
*/
@RequiresApi(api=Build.VERSION\u code.LOLLIPOP)
私有void stopScan(){
//检查前提条件
如果(正在扫描&&ble_适配器&&ble_适配器&&ble_适配器&.isEnabled()&&ble_扫描仪&&ble_适配器&=null){
//停止扫描
ble_scanner_uu.stopScan(扫描_cb_uu);
扫描完成();
}
//重置标志
scan_cb_u=null;
is_uscanning_uu=false;
扫描处理程序=null;
Log.d(标记“扫描停止”);
}
/*
在扫描停止后处理扫描结果
*/
@RequiresApi(api=Build.VERSION\u code.JELLY\u BEAN\u MR2)
私有void scanplete(){
Toast.makeText(上下文,“扫描完成”,Toast.LENGTH_LONG.show();
//检查是否没有发现任何东西
if(扫描结果为空){
Log.d(标记“扫描结果为空”);
返回;
}
找到ArrayList_devices=new ArrayList();
ArrayList已找到\u设备\u名称=新建ArrayList();
//循环扫描结果并连接
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status,int newState) {
    if (newState == BluetoothProfile.STATE_CONNECTED) {
      // you can send data here
    } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {

    }
}