##鸿蒙核心技术##运动开发##Core File Kit(文件基础服务)

前言

在运动类应用中,能够快速导入和分析其他应用的运动记录是一个极具吸引力的功能。这不仅为用户提供便利,还能增强应用的实用性和吸引力。本文将结合鸿蒙(HarmonyOS)开发实战经验,深入解析如何实现一个运动记录选择与上传功能,让运动数据的管理更加高效。

一、为什么需要运动记录上传功能

运动记录上传功能允许用户将其他应用(如 Keep)的运动数据导入到我们的应用中进行分析和管理。这不仅可以丰富我们的应用数据,还能为用户提供更全面的运动分析和建议。此外,通过上传功能,用户可以轻松备份和同步他们的运动记录,无论何时何地都能查看自己的运动历史。

二、核心功能实现

1.文件选择

为了实现文件选择功能,我们使用了鸿蒙的DocumentViewPickerAPI。以下是文件选择的核心代码:

async selectFile() {
if (this.isLoading) return; this.isLoading = true;
try {
let context = getContext(this) as common.Context; // 请确保getContext(this)返回结果为UIAbilityContext
let documentPicker = new picker.DocumentViewPicker(context);
let documentSelectOptions = new picker.DocumentSelectOptions();
// 选择文档的最大数目(可选)
documentSelectOptions.maxSelectNumber = 1;
// 选择文件的后缀类型['后缀类型描述|后缀类型'](可选) 若选择项存在多个后缀名,则每一个后缀名之间用英文逗号进行分隔(可选),后缀类型名不能超过100,选择所有文件:'所有文件(*.*)|.*';
documentSelectOptions.fileSuffixFilters = ['图片(.png, .jpg)|.png,.jpg', '文档|.txt', '视频|.mp4', '.pdf','运动数据文件|.gpx,.tcx']; const result = await documentPicker.select(documentSelectOptions); if (result && result.length > 0) {
const fileUri = result[0];
this.selectedFilePath = fileUri; // 获取文件名
this.fileName = fileUri.split('/').pop() || '未知文件'; // 获取文件大小
try {
let file = fs.openSync(fileUri, fs.OpenMode.READ_ONLY);
const stat = await fs.stat(file.fd);
this.fileSize = this.formatFileSize(stat.size);
} catch (error) {
console.error('Failed to get file size:', error);
this.fileSize = '大小未知';
} promptAction.showToast({ message: '文件选择成功', duration: 2000 });
}
} catch (err) {
console.error('Failed to select file. Cause: ' + (err as BusinessError).message);
promptAction.showToast({ message: '文件选择失败', duration: 2000 });
} finally {
this.isLoading = false;
}
}

核心点解析

DocumentViewPicker:用于选择文件的组件,支持多种文件类型。

fileSuffixFilters:设置可选择的文件类型,如图片、文档、视频等。

fs.openSyncfs.stat:用于获取文件的大小和状态信息。

promptAction.showToast:用于显示提示信息,告知用户文件选择的结果。

2.文件上传

文件上传功能是将用户选择的文件上传到服务器进行进一步处理。这里就不多写了

三、用户界面设计

为了让用户能够方便地选择和上传文件,我们需要设计一个简洁直观的用户界面。以下是用户界面的核心代码:

@Builder
pageContentBuilder() {
Column() {
Text('选择运动记录的文件:')
.fontSize(20)
.margin({ top: 20, bottom: 10 })
.width('100%')
.textAlign(TextAlign.Center); // 文件选择区域
Column() {
if (!this.selectedFilePath) {
Image($r('app.media.szxd_sport_home_setting_icon')) // 替换为你的文件图标资源
.width(80)
.height(80)
.margin({ bottom: 10 });
} Text(this.selectedFilePath ? this.fileName : '请选择文件')
.fontSize(16)
.width('90%')
.height(40)
.backgroundColor('#f0f0f0')
.borderRadius(8)
.padding(10)
.textAlign(TextAlign.Center)
.margin({ bottom: 10 });
}
.width('90%')
.height(150)
.border({ width: 1, color: '#ddd', style: BorderStyle.Dashed })
.borderRadius(8)
.justifyContent(FlexAlign.Center)
.onClick(() => this.selectFile())
.margin({ bottom: 20 }); // 文件信息展示
this.fileInfoBuilder(); // 选择文件按钮
Button(this.selectedFilePath ? '重新选择文件' : '选择文件')
.onClick(() => this.selectFile())
.width('60%')
.height(40)
.fontSize(16)
.backgroundColor('#007dff')
.borderRadius(8)
.opacity(this.isLoading ? 0.5 : 1)
.enabled(!this.isLoading); // 上传按钮(如果有上传功能)
if (this.selectedFilePath) {
Button('上传文件')
.onClick(() => this.uploadFile())
.width('60%')
.height(40)
.fontSize(16)
.backgroundColor('#07c160')
.borderRadius(8)
.margin({ top: 20 })
.opacity(this.isLoading ? 0.5 : 1)
.enabled(!this.isLoading);
}
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Start)
.alignItems(HorizontalAlign.Center);
}

核心点解析

• 文件选择区域:通过ImageText组件展示文件选择的状态,用户点击时触发文件选择逻辑。

• 文件信息展示:通过Text组件展示文件的名称和大小信息。

• 选择文件按钮:允许用户重新选择文件。

• 上传按钮:允许用户上传已选择的文件。

四、总结

通过鸿蒙的DocumentViewPicker和相关文件操作 API,我们可以轻松实现运动记录的选择功能。

HarmonyOS运动开发:如何选择并上传运动记录的更多相关文章

  1. SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework

    6.1运行效果: 6.2开发实现: 1.先在要使用的项目进行引用,SNF.WinForm.Attachments.dll文件. 2.在工具箱内新建选项卡->选择项,浏览找到文件SNF.WinFo ...

  2. 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化

    联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...

  3. IOS开发 APP提交程序上传流程

    由于苹果的机制,在非越狱机器上安装应用必须通过官方的App Store,开发者开发好应用后上传App Store,也需要通过审核等环节.AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传A ...

  4. 详细阐述Web开发中的图片上传问题

    Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...

  5. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  6. OneNET麒麟座应用开发之四:数据上传测试

    已经测试过OneNET麒麟座开发板了,这次来尝试与OneNET的连接和数据上传.这也是我们测试这块开发办的主要原因,因为在十几种我们有这种将分散的采集点数据上传到后台的需求. 先看看麒麟座这块开发板, ...

  7. HTML5 Plus 拍照或者相册选择图片上传

    HBuilder+HTML5 Plus+MUI实现拍照或者相册选择图片上传,利用HTML5 Plus的Camera.Gallery.IO.Storage和Uploader来实现手机APP拍照或者从相册 ...

  8. django之创建第10-1个项目-图片上传并记录上传时间

    1.百度云盘:django之创建第10-1个项目-图片上传并记录上传时间 2.主要修改的配置文件有3个,forms.views和models3个文件以及html 3.forms.py文件修改 #cod ...

  9. 微信小程序开发之多图片上传+服务端接收

    前言: 业务需求,这次需要做一个小程序同时选中三张图片一起上传到服务端,后端使用的.NET WEBAPI接收数据保存. 使用技术: 在这章中将会使用到微信小程序wx.uploadFile(Object ...

  10. asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)

    上文件传很常见,现在就文件上传利用HTML的File控件(uploadify)的,这里为大家介绍一下(uploadify)的一些使用方法.在目前Web开发中用的比较多的,可能uploadify(参考h ...

随机推荐

  1. 探秘Transformer系列之(14)--- 残差网络和归一化

    探秘Transformer系列之(14)--- 残差网络和归一化 目录 探秘Transformer系列之(14)--- 残差网络和归一化 0x00 概述 0x01 残差连接 1.1 问题 1.2 相关 ...

  2. Selenium反屏蔽处理

    Selenium自动化过程,在浏览器内会显示如下字样 当出现此内容时,有些网站就会判定是机器在进行操作,然后网站会加载防机器操作程序,如下图滑块验证 触发反机器操作的原理大概如下 解决方法 具体代码, ...

  3. 康谋方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案

    一.自动驾驶软件在环(SiL)测试解决方案 自动驾驶软件在环(SiL)测试解决方案能够研究和验证高历程实验和恶劣驾驶环境下的AD系统的性能,支持云端和PC端操作,提供高保真度的仿真环境和传感器模型,实 ...

  4. 被LangChain4j坑惨了!

    最近在深度体验和使用 Spring AI 和 LangChain4j,从开始的满怀期待五五开,但最后极具痛苦的使用 LangChain4j,让我真正体验到了正规军和草台班子的区别. Spring AI ...

  5. (倍增)LCA学习笔记+做题记录

    LCA学习笔记 LCA指最长公共子序列,可以使用倍增的方法求解(复杂度较优) 步骤 (1) 预处理 a. 求深度: 对于每个结点 \(dfs\) 预处理出结点深度; b. 求倍增祖先: 计算出每个结点 ...

  6. C#基础——超级方便的ExpandoObject类别

    这东西是.NET Framework 4.5 的新东西..发现这个,大概就跟发现新大陆一样的兴奋,让我再次赞叹Anders Hejlsberg 之神.. 这边有MSDN : http://msdn.m ...

  7. windows 隐藏桌面了解此图片

    1. 桌面上有了解此图片图标无法删除 这是因为在windows背景设置中选择了Window聚焦. 如果想关闭可以选择其他选项.如果不想关闭Window聚焦还想隐藏桌面了解此图片图标,可以参考下面设置. ...

  8. Sentinel——授权规则

    授权规则 授权规则是一种通过对请求来源进行甄别的鉴权规则.规则规定了哪些请求可以通过访问,而哪些请求则是被拒绝访问的.而这些请求的设置是通过黑白名单来完成的. 无论是黑名单还是白名单,其实就是一个请求 ...

  9. termux添加ll命令

    cd ~ vim .bashrc 添加如下内容 alias ll="ls -l" 保存退出 :wq source .bashrc 参考:https://www.cnblogs.co ...

  10. 解决C盘根目录不能创建文件,只能创建文件夹问题

    转载:https://blog.csdn.net/xinke453/article/details/7496545 解决方法 用管理员运行cmd 输入 icacls c:\ /setintegrity ...