如何让用户与我的应用程序生成的多个音频文件交互

问题描述 投票:0回答:1

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

  1. 用户使用
    registerForActivityResult(ActivityResultContracts.GetContent()
    和 URI
    audio/*
  2. 输入音频文件
  3. 我的应用程序将此文件复制到应用程序的
    getExternalCacheDir
    ,以便我的 NDK 函数可以找到它
  4. 调用我的 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>

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

但是,我认为我的理解是有缺陷的,我们不允许用Intent系统做这样的事情。有什么好方法可以让用户对我的应用程序输出的音频文件做任何他们想做的事情,或者让他们浏览所述文件?

我尝试保存到媒体商店,它有效 - 我可以在

Audio/unknown/App Name/
中看到文件。然而,我再次找不到使用
EXTRA_INITIAL_URI
启动文件浏览器以指向此目录的方法。

我该怎么办?

android audio file-browser
1个回答
0
投票

使用 URI 音频/*

FWIW,

audio/*
是 MIME 类型,而不是 URI。

我的应用程序复制此文件

FWIW,不需要从

Uri
获得的
ActivityResultContracts.GetContent
来表示文件。

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

抱歉,这不是一个选择。不存在完全相同且保证在所有约 30 亿 Android 设备上存在的“内置文件浏览器”。而且,在现代版本的 Android 上,任何此类文件浏览器都将无法访问您选择的位置。

让用户对我的应用程序输出的音频文件做任何他们想做的事情,或者让他们浏览所述文件,有什么好方法?

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

使用您在临时步骤中创建的文件(因为您使用的是 NDK)。然后让用户通过

ActivityResultContracts.OpenDocumentTree
决定他们最终要去哪里,将文件复制到该树中的文档中。现在,内容位于用户控制的位置,他们可以使用他们想要的任何文件管理器或其他工具。

© www.soinside.com 2019 - 2024. All rights reserved.