当前位置: 首页 > web >正文

YModem在Android上的实现(四)

主要问题解决基于Ymodem的library:

一:AS debug 优化使用以及 log使用

二:函数没有正常流程走

1)一开始流程没有走对,主要是蓝牙连接的雷达设备返回数据时,没有调用onDataReceivedFromBLE(bytes)方法,调用onDataReceivedFromBLE(bytes)方法后会进一步执行public void onReceiveData(byte[] respData),具体里面的case(如:case STEP_FILE_NAME,case STEP_FILE_BODY,case STEP_EOT)会进一步 执行对应的handle方法(如:handleFileName(respData),handleFileBody(respData),handleEOT(respData)等);前面的handle系列的方法,主要会对返回的值如:C,ACK,NAK进行分值处理!!

//读取蓝牙设备发出来的数据回调
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {super.onCharacteristicChanged(gatt, characteristic);//接收数据bytes = characteristic.getValue();//针对YModem协议返回值的响应MainActivity.onDataReceivedFromBLE(bytes);Log.d("XTQ_YModem_1028", "[RCV]data="+ Arrays.toString(bytes));
}

三:固件升级的YModem协议的使用与调试

主要是第一次发送EOT,设备返回NAK,第二次发送EOT,设备返回ACK&C的这一部分与实际的原始library的代码的区别;基于对协议规范进行逻辑修改!

三:BLE蓝牙传输的弊端导致传输的中断,进一步的需要加入延时

writeCharacteristic.setValue(data);
Log.d("XTQ_YModem_1031","data长度!!!"+data.length);
mBluetoothGatt.writeCharacteristic(writeCharacteristic);//在发送数据的地方加入延时
try {Thread.sleep(20);
}catch(InterruptedException e){e.printStackTrace();
}

四:android文件的权限报错,

具体报错内容为: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)

Step 1:修改manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Step 2:MainActivity中添加

private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE };//确认权限的方法
public static void verifyStoragePermissions(Activity activity) {// Check if we have write permissionint permission = ActivityCompat.checkSelfPermission(activity,Manifest.permission.WRITE_EXTERNAL_STORAGE);if (permission != PackageManager.PERMISSION_GRANTED) {// We don't have permission so prompt the userActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);}
}

http://www.xdnf.cn/news/16067.html

相关文章:

  • Oracle数据库索引性能机制深度解析:从数据结构到企业实践的系统性知识体系
  • Android 单编 framework 相关产物输出介绍
  • Unreal ARPG笔记
  • Oracle自治事务——从问题到实践的深度解析
  • Linux 文件操作详解:结构、系统调用、权限与实践
  • 搭建前端页面,介绍对应标签
  • 合并pdf工具下载
  • 深入解析Hadoop MapReduce Shuffle过程:从环形缓冲区溢写到Sort与Merge源码
  • Idea或Pycharm上.idea的忽略提交的问题总结
  • 从 C# 到 Python:项目实战第五天的飞跃
  • Linux 721 创建实现镜像的逻辑卷
  • 表单校验--数组各项独立校验
  • mac安装node的步骤
  • uni-app开发小程序,根据图片提取主题色值
  • 查看两个tv and 手机模拟器的ip
  • 修复echarts由4.x升级5.x出现地图报错echarts/map/js/china.js未找到
  • 每日数据推荐:一线城市基于手机信令的职住数据
  • 对称加密技术详解:原理、算法与实际应用
  • 6.String、StringBuffer、StringBuilder区别及使用场景
  • AI Red Teaming 分析
  • GraphRAG快速入门和原理理解
  • 一维DP深度解析
  • Qt5线程相关事项
  • C# 转换(is和as运算符)
  • vue-pinia
  • WebkitSpeechRecognition 语音识别
  • QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释
  • nginx + uwsgi + systemd 部署 flask
  • 在Windows Server 2012 R2中安装与配置IIS服务并部署mssql靶机教程
  • springboot实战篇1