我有一款针对SDK>=33的Android应用程序.目前它有以下流程:

  1. 用户使用registerForActivityResult(ActivityResultContracts.GetContent()和URI audio/*输入音频文件
  2. 我的应用将此文件复制到应用的getExternalCacheDir,以便我的NDK函数可以定位它
  3. 删除我的NDK函数,它从应用本地存储读取复制的文件,进行一些处理,并将输出写入应用的getExternalFilesDir(Environment.DIRECTORY_MUSIC)路径,

在这一点上,我有了一个输出文件的列表,我准备将这些文件作为处理结果返回给用户:

com.my.app  Out file: /storage/emulated/0/Android/data/com.my.app/files/Music/processed_file_0.wav
com.my.app  Out file: /storage/emulated/0/Android/data/com.my.app/files/Music/processed_file_1.wav

我真正想要的是启动Android内置的文件浏览器到父目录/storage/emulated/0/Android/data/com.my.app/files/Music/,按钮如下: <Browse processed outputs>

我希望有一个自然的/内置的文件浏览器可以轻松地让用户做任何他们想做的事情,如共享,保存,复制,或打开/收听/播放文件—这些都不是我想在我的应用程序中重新实现的功能,如果有 Select 的话.

但是,我认为我的理解是有缺陷的,我们不允许用意图系统做这样的事情.什么是好的方式让用户对我的应用输出的音频文件做任何他们想做的事情,或者 bootstrap 他们浏览这些文件?

我try 将文件保存到媒体store ,但工作正常--我可以看到Audio/unknown/App Name/英寸的文件.然而,我还是找不到一种方法来启动具有EXTRA_INITIAL_URI的文件浏览器来指向该目录.

我该怎么办?

推荐答案

使用URI音频/*

FWIW,audio/*是MIME类型,而不是URI.

我的应用程序复制此文件

FWIW,没有要求你从ActivityResultContracts.GetContent得到的Uri来表示一个文件.

我真正想要的是使用如下按钮启动父目录/storage/emulated/0/Android/data/com.my.app/files/Music/,的Android内置文件浏览器:

对不起,这不是一个选项.没有一个"内置文件浏览器"是完全相同的,并保证在所有大约30亿台Android设备上都存在.而且,在现代版本的Android上,任何这样的文件浏览器都无法访问您 Select 的位置.

有什么好方法可以让用户随心所欲地处理我的应用程序输出的音频文件,或者让他们浏览这些文件?

首先,让用户控制创建这些文档的位置.

使用文件,就像你正在创建的临时步骤(因为你使用的是NDK).然后让用户决定他们最终通过ActivityResultContracts.OpenDocumentTreego 哪里,复制文件到该树中的文档.现在,内容位于用户控制的位置,他们可以使用他们想要的任何文件管理器或其他工具.

Android相关问答推荐

在Android应用程序上使用Room数据库时,是否可以预先填充数据

懒惰的垂直网格中盒子的重量-Jetpack组合

fillMaxHeight中的分数在列内不起作用(android jetpack compose)

StateFlow集合AsState没有更新他的值Jetpack Compose导航

在柯特林连续测量网速

Modifer.Align()不适用于行/列/框中的文本.未解决的作用域实例错误

我们可以使用KSP读取类中变量的值吗?

如何将.txtassets资源 转换为ArrayList<;字符串>;kotlin格式?

如何在卡片视图右侧添加箭头

有没有办法迭代类型安全的项目访问器?

如何使用react native下载android中/data/data/[应用程序包名称文件夹]/files中的文件

尽管我在onCreate()期间已经初始化,但仍出现未初始化的late init变量错误

是什么导致调用 Firebase 服务器?

如何在 Jetpack Compose 中将文本绘制在另一个对象的中心?

如何在一个活动中预加载图像然后在另一个活动中加载它们?

CoroutineScope 与挂起函数

Jetpack Compose Canvas drawText colored颜色 混合?

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

Android Studio Emulator Internet 连接问题仅是第一次

Android:如何获取具有纬度和经度的位置的图像