关于react native文件路径的烦心事

前言:我听歌比较喜欢播放本地音乐,但是那些本地播放APP总会有些这样或那样让我不顺的问题,比如中文/日文识别为乱码,比如换一个文件夹它就不知道我上一次在这文件夹里播的啥音乐,再比如无法按文件名排序。

最近公司项目做APP,学了react native。于是想用react native把本地音乐播放器给造一个出来了,本来一天就能搞定的事,前前后后磨了快一星期,终于搞定了。

1.由于我之前用荣耀10做测试,后来换成小米13,直接把react-native-document-picker的多选给搞废了,组件不兼容多选必须得用安卓原生来,然后开始研究原生代码该怎么写……

2.react-native-track-player没有是否已经初始化的判定,导致我修改完代码每次保存后,都还再次运行useEffect提示说已经注册了插件,最后还好用useRef的current是否存在来解决。

3.小米底部安全区域遮挡问题还困扰了我一下,最后在MainActivity.java重写onCreate + styles.xml增加navigationBarColor配置下搞定。

4.最大的障碍!!!react-native-track-player究竟能播放哪种路径的文件?

由于我用的react-native-document-picker选择文件,它默认返回的【content://com.android.externalstorage.documents/document/primary%3AMusic%2FEnglish%2FXXX.mp3】是不能直接播放的。

然后我找到了它的API文档,有个copyTo的配置,然后返回的【file:///data/user/0/com.caicemusic/files/d99163f2-aa31-45d3-a4a7-947ecf13d18e/XXX.mp3】是可以播的,但是!这存在两个问题,一是我选择的音乐至少都上百首,全部copy后,APP的存储体积飙升几个G。二是,我的小米13由于上述的1.无法多选导致这路被封死了。

所以我的研究方向就变成了,怎么把content:\\文件转化为file:\\,就是这问题卡了我一周!

什么react-native-fsrn-fetch-blob等被我装装卸卸了好多次,后来用原生java转,在DocumentFile.fromTreeUri(getReactApplicationContext(), uri)拿到文件后,通过file.getUri().toString()确实也拿到了缓存路径可以播,但【content://com.android.externalstorage.documents/tree/primary%3AMusic%2FEnglish/document/primary%3AMusic%2FEnglish%2FXXX.mp3】的路径在退出APP之后再进来,就无法再次使用了。

之后我才想到,可以参考那些已有项目,看看别人是怎么写音乐播放器,于是找到了,它直接用react-native-get-music-files来获取文件路径【/storage/emulated/0/Music/English/XXX.mp3】,这个路径好眼熟,我曾经用rn-fetch-blob拿到过呀,原来它就能播?

最终,这个符合我个人需求的音乐播放器总算是做完了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第11章 软件工程

这里写目录标题 1.软件过程1.1能力成熟度模型(CMM)1.2能力成熟度模型集成(CMMI)1.3瀑布模型(线性顺序)1.4增量模型1.5演化模型1.5.1原型模型1.5.2螺旋模型 1.6喷泉模型1.7统一过程(UP)模型 2.敏捷方法3.系统设计4.系统测试4.1单元测试(模块测试)4.2集成测试4.3黑盒测试(功能测试…

HNU-人工智能-实验1-A*算法

人工智能-实验1 计科210x 甘晴void 一、实验目的 掌握有信息搜索策略的算法思想; 能够编程实现搜索算法; 应用A*搜索算法求解罗马尼亚问题。 二、实验平台 课程实训平台https://www.educoder.net/shixuns/vgmzcukh/challenges 三、实验内容 3.…

如何将数据导入python

Python导入数据的三种方式: 1、通过标准的Python库导入CSV文件 Python提供了一个标准的类库CSV文件。这个类库中的reader()函数用来导入CSV文件。当CSV文件被读入后,可以利用这些数据生成一个NumPy数组,用来训练算法模型。 from csv import…

【操作系统】Linux 系统中的 Load Average(负载均衡)是如何计算的

在 Linux 系统中,Load Average(负载均衡)是一个重要的性能指标,它反映了系统在一段时间内的负载情况。本文将讲解 Load Average 的含义、计算方法以及如何解读 Load Average。 1. Load Average 是什么? Load Average…

详细介绍如何使用YOLOv9 在医疗数据集上进行实例分割-含源码+数据集下载

深度学习彻底改变了医学图像分析。通过识别医学图像中的复杂模式,它可以帮助我们解释有关生物系统的重要见解。因此,如果您希望利用深度学习进行医疗诊断,本文可以成为在医疗数据集上微调YOLOv9 实例分割的良好起点。 实例分割模型不是简单地将区域分类为属于特定细胞类型,…

基于Springboot的校园竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园竞赛管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

stl容器 string类的基本操作

目录 一.string类的构造 二.string类的输出 1.传统字符串输出 2.通过迭代器进行输出 ​编辑 3.C11标准的范围for输出加auto推导类型 三.string类的各种迭代器 begin()和end() 利用迭代器遍历输出 利用迭代器修改字符串的字符 rbgin()和rend() 利用迭代器遍…

创造价值与回报:创业者的思维格局与商业智慧

在纷繁复杂的商业世界中,有一种信念始终贯穿于无数创业者的心中——那就是创造价值。张磊的这句“只要不断地创造价值,迟早会有回报”道出了创业者的核心思维格局和商业智慧。本文将从创业者的角度,探讨创造价值的重要性,以及如何…

5.Spring Security-web权限方案

设置登录的用户名和密码 1.通过配置文件设置用户名密码 spring:security:user:name: xiankejinpassword: 123456 如果没有以上配置,那么就会在后台生成一个随机密码,用户名固定位user。 2.通过配置类设置用户名密码 Configuration public class Sec…

为什么说虚拟化技术是现代网络安全的重要组成部分?

虚拟化技术是一种对计算机资源的抽象和资源管理技术,将电脑的各种实体资源(CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。今天德迅云安全带您了解为什么虚拟化技术能成…

【Flask开发实战】flask装饰器介绍

一、前言 前面我们已经完成了登录页面的创建,在后续页面的创建中,需要解决一个问题,就是用户是否已认证登录,对于已经认证登录后我们可以开放其他页面访问的权限,如果是没有验证登录的,则应该拒绝访问。此…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

基于AT89C51单片机的温度上下限自动控制检报警设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89247694?spm=1001.2014.3001.5501 C 源码+仿真图+毕业设计+实物制作步骤+06 题 目 基于单片机的温度检测调节系统设计 姓 名 学 号 专业班级 指导教师 年 月 日 任务书 …

在Mac OS系统下查看CPU型号以及核心数量

1. 基础信息 一般点开mac的关于本机,显示的是下面的信息: 2. 当前电脑的处理器型号 找到并打开终端输入下面命令: sysctl machdep.cpu.brand_string结果如下图: 3. 当前处理器物理核心数量 找到并打开终端输入下面命令&am…

有没有适合制造企业用的研发项目管理软件?制造业选型案例必看!“追觅”上线奥博思项目管理软件,加速项目交付

智能清洁家电赛道的领军者:追觅科技(苏州)有限公司(以下简称“追觅”)成功上线奥博思 PowerProject 数字化项目管理系统。通过 PowerProject 系统,追觅公司能够实现项目全流程的覆盖,从预研阶段…

【电源专题】拿人体的循环系统与板级电源做个比较

一般人可能会觉得电源大概是电子设备里面比较容易搞定的门类。因为,只要线路没有接错,指示灯(如果有)能亮,电源都能工作。从这个方面说,好像是很容易。但是通过多年的经验和经历的坑,发现电源其实是一个很麻烦的东西,稍微有一点不完美就会有大问题出现。 如果将人体也当…

北斗、网络时钟服务器(NTP授时服务器)几种设置方法

北斗、网络时钟服务器(NTP授时服务器)几种设置方法 计算机网络必须设立属于主机的NTP服务器,向网内用户提供网络校时服务,使得各种网络设备、服务器、个人计算机等可以通过NTP服务器校正它们自己的时间,用户可使用任何…

ue引擎游戏开发笔记(30)——对角色移动进行优化:实现人物转向

1.需求分析: 当前我们只实现了通过控制器可使角色进行前后左右的移动,但角色移动时与动画不匹配,并不会进行转向,实现角色随移动转向。 2.操作实现: 1思路:利用反转换函数inverse transform direction获取…

【PyTorch】7-生态简介

PyTorch:7-生态简介 注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录 7.1:torchvision 7.1.1:简介 The torchvision package consists of popula…

【busybox记录】【shell指令】md5sum

目录 内容来源: 【GUN】【md5sum】指令介绍 【busybox】【md5sum】指令介绍 【linux】【md5sum】指令介绍 使用示例: 128位MD5 - 默认输出 128位MD5 - 将每个文件当做二进制处理 128位MD5 - 从文件中读取MD5值并做检查 128位MD5 - 创建一个BSD风…