Android 11:如何/在哪里写入应在卸载后仍然存在的混合媒体文件

2024-02-13

我正在编写一个针对 Android 11 的特定用例相机应用程序。当我点击记录时,我想在某处创建一个新目录(名称基于时间戳等),其中包含生成的视频以及整个堆其他也在录制过程中写入的自定义 YAML/JSON/CSV 文件(逻辑上属于录制的“输出”)。

我希望所有生成的文件在应用程序卸载/重新安装后都能保存下来,因为我不想让用户在卸载应用程序时面临丢失他们记录的所有内容的风险。如何利用 Android 11 中新的范围存储更改等来做到这一点?

查看概述here https://developer.android.com/training/data-storage, 我理解了:

  • 应用程序特定文件, 应用程序偏好设置 and Database显然不适合,因为这些文件在卸载后无法保存
  • 文件和其他文件使用存储访问框架,但这并不合适,因为每次要写入内容时都需要系统文件选择器。这会扰乱录制/用户体验的流程,并且没有相机应用程序能像这样工作。
  • 数据集/BlobStoreManager (here https://developer.android.com/training/data-storage/shared)也不适合我的用例。
  • 媒体商店API看起来它应该是那个,但在生成整个输出目录(包括自定义 YAML/JSON/CSV 文本文件)方面,它似乎无法做到我想要的,所有这些文件都属于一起。我的目标是用户在任何时候都可以简单地转到文件资源管理器,导航到适当的文件夹,然后将包含录音的文件夹复制到他们的计算机或其他设备上,以保存/查看数据。如果您的应用程序使用范围存储,即使 MediaStore.Files 似乎也不能保证您实际上可以做到这一点。

似乎剩下的唯一选择是使用 MANAGE_EXTERNAL_STORAGE 并将数据放在主目录中我想要的任何位置,但这似乎只是为了能够保存一些文本文件以及我制作的视频。此外,该权限是 Android 11 特定的。如果我想支持较旧的 Android 版本,我需要做什么?

我在这里最好的选择是什么?我错过了一个选项吗?


但这不合适,因为每次你想写东西时它都需要一个系统文件选择器

No.

Use ACTION_OPEN_DOCUMENT_TREE让用户选择一个文档树。在那里,您可以创建自己的子树并将自己的文档放入该子树中。除了初始文件之外,您不需要“系统文件选择器”ACTION_OPEN_DOCUMENT_TREE要求自己。并且生成的文档将在卸载后继续存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 11:如何/在哪里写入应在卸载后仍然存在的混合媒体文件 的相关文章

  • 添加监听器与设置监听器

    添加监听器和设置监听器有什么区别 e g addTextChangedListener textWatcher setOnClickListener clickListener Answer 在 aioobe 的回答之后 我在我的项目中对此
  • 从数据库中删除项目后如何从 recyclerView 中删除项目

    我正在使用 recyclerView 来显示当用户单击每个项目的删除按钮时可以删除的项目列表 为了做到这一点 我使用了 recyclerview 适配器 我想要的是 从该 recycleView 适配器中 当用户单击某个项目的删除按钮时 会
  • 如何使用 Espresso 访问外部网站上的元素

    使用 espresso 我们单击 登录 按钮 该按钮将启动一个外部网站 Chrome 自定义选项卡 您可以在其中登录 然后重定向回我们的 Android 应用程序 Espresso 有没有办法 1 验证正在启动的 URL 是否正确2 访问网
  • 使用缩略图作为毕加索的占位符

    从用户体验的角度来看 首先向用户显示缩略图 直到真实图像完成加载 然后向他显示 这会很棒 但是Picasso https github com square picasso仅使用资源文件作为占位符 例如 Picasso with conte
  • Java中如何动态添加charsequence[]中的数据?

    初始化的一种方法charsequence is charsequence item abc def 但我不想以这种方式初始化它 有人可以建议其他方式吗 比如我们初始化的方式string arrays 首先 修复变量声明 charsequen
  • 如何在谷歌地图中使用latlng字符串数组绘制多边形

    在我的应用程序中 我有包含 imagview 的 recyclerview 并且该 imageview 通过使用我存储在 sqlite 中的坐标包含静态地图图像 当我单击该图像时 我将该字符串数组格式的坐标传递给其他地图活动 然后使用该字符
  • 为什么Volley的onResponse没有被调用

    我正在通过 Volley 获取 json 数据 我遇到的问题 那是凌空的onResponse从未被调用 因此不会解析和显示数据 JSON 数据示例 title This is a sample text title title cat or
  • 如何以编程方式启用编辑文本的垂直滚动条

    我正在尝试实施android scrollbars vertical 通过 Java 代码在 XML 中 我尝试过方法setVerticalScrollBarEnabled true 但它不起作用 有人可以给我一个建议吗 提前致谢 您可以使
  • PinnedHeader Google 加上 GridView?

    背景 Google google 应用程序可以很好地查看 亮点 类别中的图像 对于该屏幕上的每个部分 他们制作了一个标题 其中包含可单击的文本和一个用于选择该部分的所有照片的按钮 对于每个部分 他们还以网格状方式显示照片 它是这样的 这是另
  • Android 时间选择器在分钟滚动时自动更改小时

    例如 当我在 TimePicker 上滚动分钟时 在将分钟滚动到 59 后 小时会自动滚动到 7 因此新时间将为 07 59 同样的方式 如果我有 07 59 并且我将分钟滚动到 00 小时将自动滚动到 8 所以时间将是 08 00 此逻辑
  • 如何删除旧版本的Android Studio

    我必须释放硬盘中的一些空间 并寻找要删除的内容 我发现我有许多引用旧版本的 Android Studio AS 文件夹 我发现文件夹的路径是 C Users mysuername 我想要的是删除旧版本并只保留最新版本的方法 当时是 ASPr
  • 使用 Backstack 时 TabLayout ViewPager 未加载 [重复]

    这个问题在这里已经有答案了 我在一个片段中使用 TabLayout 和 viewPager 在选项卡下方的两个片段之间切换 当我单击下部片段之一内的 FAB 时 我会加载一个新片段 用于输入 但是 当我按 后退 按钮时 TabLayout
  • 如何让android BottomAppBar圆角化

    我正在使用BottomAppBar来自谷歌这样的
  • 如果我清理了反向引用,我是否可以观察 ViewModel?

    建议的实施方式ViewModel是通过使用来公开变化的数据LiveData活动 片段和视图的对象 有一些情况 当LiveData不是一个理想的答案或根本没有答案 自然的选择是将观察者模式应用于ViewModel 使其成为可观察的 注册观察员
  • 如何在android上使用xamarin表单执行脚本

    我正在尝试在 Android Mono 上使用 Xamarin Forms 运行 C 脚本 当我运行脚本时 我收到错误 System IO FileNotFoundException 找不到文件 mscorlib dll 这是我试图执行的代
  • 加载带有月份标题的 recyclerview 不同类型适配器

    如果从 api 获取不同的月份名称 则尝试将月份名称显示为标题 在这里 我加载月份标题 但是当我加载标题时 它不会加载其他视图 如果数据不同 我需要将月份加载为标题 并且还加载其他视图持有者 我看到一些例子 他们都在 Model 类中使用
  • 将字节数组保存为 Android 设备文件夹中的 jpg 文件

    我正在尝试将图像保存在 Android 设备的文件夹中 我使用的代码如下 var newFolder AndroidEnvironment GetExternalStoragePublicDirectory AndroidEnvironme
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • 如何在flutter上关注android tv应用程序中的列表视图项目

    我想在 flutter 中构建一个 android 电视应用程序 几乎所有事情都已完成 但一个问题是我无法集中注意力 例如一些弹出效果或边框更改任何告诉用户您现在正在使用此项目的内容 我们在列表视图中迭代的项目 我想要在应用程序中看到的图像
  • Android:如何获取所有可用意图过滤器的列表?

    我搜索了 Android 文档 但由于某些疯狂的原因 我无法找到所有可用意图过滤器的列表 我正在寻找一个意图过滤器 它可以执行诸如通过广播接收器通知我特定活动 例如浏览器或电子邮件 已启动或位于前台之类的操作 有人能帮我吗 PackageE

随机推荐

  • NAT 后面的 HTTP 服务器

    我正在尝试在多层 NAT 后面创建一个 apache 服务器 以便可以从 Internet 访问 限制 避免中继 有一个公共服务器 我们称他为OldMan 用于登录 眩晕 但其带宽太差 无法承载中继数据 我无权手动配置 NAT 3 用户无需
  • Magento BestSeller 模块 - 汇总可配置产品并将其添加回

    这已经困扰我很长一段时间了 基本上 我们想要实现的目标是在首页的畅销书上列出产品的销量 对于简单的产品 这工作正常 但是对于可配置的产品 它们将显示为订购数量 0 我需要以某种方式找到一种方法来获取可配置产品 找到附加到它们的简单产品 将这
  • 如何使用addView向布局添加视图?

    我已经阅读了可能所有的帖子和文档 但我仍然无法解决这个问题 我想用addView 方法将视图添加到现有 正在运行 布局 但由于某种原因我不能 我知道这应该是简单和基本的 但我仍然做不到 所以 请帮助我 这是一个代码 LinearLayout
  • 如何将 C 数学运算符 (+-*/%) 传递到函数 result=mathfunc(x,+,y); 中?

    我正在 C 程序中为多精度整数编写一些数学例程 我希望能够轻松编写表达式 但用我自己的函数处理数学 所以我想要某种方法可以让我做到这一点 MPI x mpi 5 y mpi 6 z z mpimath x y 在 C 中通过某种方式对字符进
  • Hive 中的倾斜表

    我正在学习蜂巢并遇到倾斜的表格 帮助我理解它 Hive 中的倾斜表是什么 我们如何创建倾斜表 它如何影响性能 Hive 中的倾斜表是什么 倾斜表是一种特殊类型的表 其中经常出现的值 严重倾斜 被分成单独的文件 其余的值转到其他文件 我们如何
  • iTextSharp - 在添加到列之前计算短语/段落高度

    我正在创建包含不同数量的项目和注释的 PDF 工作订单 我在用ColumnText SetSimpleColumn phrase x y x2 y2 height alignment 将文本添加到单个列 我可以获得 ColumnText Y
  • 模板解析错误:没有将“exportAs”设置为“matMenu”的指令

    随着 Angular Material 及其重大变化 https github com angular material2 blob master CHANGELOG md 200 beta11 carapace parapet 2017
  • Val 不适用于 UInt64?

    只是好奇为什么以下代码无法将 uint64 值转换为字符串表示形式 var num UInt64 s string err Integer begin s 18446744073709551615 High UInt64 Val s num
  • CAEmitterLayer 与 CACurrentMediaTime() 的计时不正确,有时根本不显示

    我目前正在使用 CAEmitterLayer 制作粒子发射器 并在启动动画时遇到层预加载动画的问题 因此当我显示动画时粒子遍布各处 许多答案都说罪魁祸首是 CAEmitterLayer 被预加载 我们只需将发射器上的 beginTime 设
  • 如何通过 postman 连接到 Spring Boot WebSocket 应用程序的主题/队列?

    我想订阅 topic greetings 我如何在邮递员中使用原始方法和socket io 做到这一点 还有其他替代方法可以在本地测试 websocket 吗 我的代码来自这里 Spring Boot 入门 websocket 应用程序 h
  • 在 Haskell 中获取随机列表项

    After 回顾这个SO问题 https stackoverflow com questions 8416365 generate a random integer in a range in haskell我正在尝试使用随机数生成器根据返
  • PHP Symfony 服务器运行意外终止

    我开始学习 PHP Symfony2 框架 我有一台装有 Windows 7 和 Wamp manager 2 2 的 PC 其中包括 PHP 5 4 3 和 Apache 2 4 2 我按照以下步骤尝试安装和运行 Symfony2 项目
  • 在 Android 中使用 Path.arcTo() 绘制圆环时的奇怪行为

    我已经成功地从 0 到 360 度的角度开始扫动 实现了一个动画绘图环 然而 当环尾部以 360 度角与头部相遇时 所有绘图都消失了 这是我的戒指代码onDraw float startAngle 270 float sweepAngle
  • 单击图像上的工具提示

    我有一张桌子 上面有 thead 和 th s 在每个里面我都有一个形状问号 的图像 我想在单击每个帮助图像时显示帮助 工具提示 这个怎么做 请建议 我会使用一个插件 Tooltip http bassistance de jquery p
  • 如何隐藏html div

    我正在用 Ruby On Rails 开发一个小型应用程序 我想隐藏 html erb 文件中的 div 直到单击链接 最简单的方法是什么 在你的 html 文件中 a href Show Whatever a div class hidd
  • JavaScript 不显示在网页上?

    div div
  • 如何使用通配符路径规范从分支检出文件?

    我无法使用通配符签出文件 如git scm 页面 https git scm com docs gitglossary html def pathspec 来自特定的 refspec 用一个例子来描述这个问题 使用 java 和 c 文件创
  • 如何在自引用外键中使用现有查询引用所有子对象?

    我有一个代表所有者的模型 该模型自身有一个外键来表示父实体 还有另一种模型 称为具有所有者外键的资产 母公司外键的目的是模拟公司结构 以便母公司 拥有 外键为其自身或子公司的资产 Class Owner models Model paren
  • 实现自己的memcpy(大小以字节为单位?)

    我最近遇到一个面试问题 我必须实现 memcpy 根据我的经验 我已经使用过很多memcpy 所以这似乎不是一个棘手的问题 因此 我开始实现一个循环 一次从一个指针复制一个地址到另一个指针 如下所示 void memcpy void des
  • Android 11:如何/在哪里写入应在卸载后仍然存在的混合媒体文件

    我正在编写一个针对 Android 11 的特定用例相机应用程序 当我点击记录时 我想在某处创建一个新目录 名称基于时间戳等 其中包含生成的视频以及整个堆其他也在录制过程中写入的自定义 YAML JSON CSV 文件 逻辑上属于录制的 输