关于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拿到过呀,原来它就能播?

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

相关推荐

  1. 关于react native文件路径烦心

    2024-05-01 15:40:03       37 阅读
  2. 关于Django静态文件路径设置规则精炼总结

    2024-05-01 15:40:03       78 阅读
  3. 关于利率,你需要知道那些

    2024-05-01 15:40:03       47 阅读
  4. 关于 jsconfig.json 文件在导入文件路径提示方面

    2024-05-01 15:40:03       52 阅读
  5. React】04-关于React Props实践

    2024-05-01 15:40:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 15:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 15:40:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 15:40:03       82 阅读
  4. Python语言-面向对象

    2024-05-01 15:40:03       91 阅读

热门阅读

  1. 认识产品经理

    2024-05-01 15:40:03       29 阅读
  2. 软设之进程的状态

    2024-05-01 15:40:03       25 阅读
  3. AForge.NET是啥

    2024-05-01 15:40:03       37 阅读
  4. Falsk简介

    2024-05-01 15:40:03       30 阅读
  5. 注解式开发Spring

    2024-05-01 15:40:03       33 阅读
  6. mysql中的索引

    2024-05-01 15:40:03       33 阅读
  7. 数据库语法复习

    2024-05-01 15:40:03       31 阅读
  8. Redis:三种启动方式

    2024-05-01 15:40:03       30 阅读
  9. 虚拟机中new指令的秘密

    2024-05-01 15:40:03       40 阅读
  10. stm32mp135d u-boot 引导流程

    2024-05-01 15:40:03       34 阅读
  11. Python如何实现抽象工厂模式

    2024-05-01 15:40:03       34 阅读
  12. 每日算法之二叉树的层序遍历

    2024-05-01 15:40:03       34 阅读