android - Flutter 从应用缓存播放本地音频文件
问题描述
我正在使用Flutter Cache Manager包来缓存音频文件,我使用这种方法来缓存文件
await DefaultCacheManager().downloadFile(url);
,然后我使用
FileInfo item = await DefaultCacheManager().getFileFromCache(cacheKey);
并且这个过程工作正常。打印 item.file.path 时,它会给出带有正确扩展名 (.mp3) 的文件的确切路径。然后我找到了一个从缓存播放文件的解决方案,但它给出了错误。
final file = new File(item.file.path);
String url = file.uri.path;
await file.writeAsBytes((await rootBundle.load(url)).buffer.asUint8List());
var _audioSrc = AudioSource.uri(
Uri.file(url),
tag: response[i]
);
print(_audioSrc.uri);
AudioPlayer().setAudioSource(_audioSrc);
请注意,print(_audioSrc.uri);
它给出了文件的路径,例如
file:///var/mobile/Containers/Data/Application/61327A88-3B02-43CC-BCBB-76BC5E29E55F/Library/Caches/libCachedImageData/fa81fb50-3460-11ec-b813-05717f61c9c5.mp3
但它不会播放,并且在 IOS 和 Android 上都会出现以下错误
[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: (-11828) Cannot Open
#0 AudioPlayer._load (package:just_audio/just_audio.dart:785:9)
<asynchronous suspension>
#1 AudioPlayer._setPlatformActive.setPlatform (package:just_audio/just_audio.dart:1351:28)
<asynchronous suspension>
IOS上的这个错误
NSURLConnection finished with error - code -1002
解决方案
推荐阅读
- c++ - Visual Studio 非 vcxproj 标头仅包含在代码分析中
- distributed - Raft Leader 选举,当candidater 收到带有 Higher Term 的 voteRequest 时,candidater 应该怎么做?
- django - 如何在 django Rest Framework 中从 view.py 提供 SerializerMethodField 输入
- visual-studio - Unity WebGL - 有没有办法清除构建时的所有错误?
- reactjs - 反应本机博览会 api 发布问题
- javascript - 如何在 react-bootstrap 中打开不同的折叠按钮?
- sql - 在 Postgres 中创建索引的理想顺序
- elasticsearch - Elasticsearch 高段数
- java - Android-Java通过Javax.mail发送邮件失败
- android - 布局锚重力不尊重参数