Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >迁移到适用于Android的范围存储Q

迁移到适用于Android的范围存储Q
EN

Stack Overflow用户
提问于 2019-08-05 15:56:59
回答 1查看 2.3K关注 0票数 4

当用户在我的应用程序中拍照时,图片会保存在本地的内部存储中。然后我还允许移动到外部存储器,在那里他们可以抓取,然后通过将设备插入计算机并在他们需要的情况下将它们从那里取下。

我会这样做的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val tempDir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "My_App_Folder")

val baseFile = File(filePath)
if(baseFile.exists()){
    val targetFile = File(directory.path+File.separator+targetFileName)
    baseFile.copyTo(targetFile)
    baseFile.delete()
}

图像会像我想要的那样在Pictures/My_App_Folder中结束

现在尝试移动到MediaStore以支持scoped storage,我不确定如何将文件保存到同一文件夹中。

我试着去做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val values:ContentValues = ContentValues()
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg")
values.put(MediaStore.Images.Media.DATE_ADDED,System.currentTimeMillis() / 1000)
values.put(MediaStore.Images.Media.TITLE, targetFileName)
values.put(MediaStore.Images.Media.DISPLAY_NAME, targetFileName)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
   values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis())
   values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES+"/My_App_Folder")
   uri = contentResolver.insert(MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL),values)
}else{
   uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values)
}

但现在该文件夹中什么也没有出现,我觉得我遗漏了MediaStore的一些基本内容,我不确定它是什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-05 17:18:30

正如Mike指出的,在插入到内容解析器之后,我必须使用来自uri的输出流来保存图像,所以一个向后兼容的示例如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private fun saveFileToExternalStorage(directory:File?,filePath:String,targetFileName:String){
        var uri:Uri? = null
        val values:ContentValues = ContentValues()
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
            values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg")
            values.put(MediaStore.Images.Media.DATE_ADDED,System.currentTimeMillis() / 1000)
            values.put(MediaStore.Images.Media.TITLE, targetFileName)
            values.put(MediaStore.Images.Media.DISPLAY_NAME, targetFileName)
            values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis())
            values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES+"/My_App_Folder")
            values.put(MediaStore.Images.Media.IS_PENDING, 1)
            uri= contentResolver.insert(MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),values)
        }

        val baseFile = File(filePath)
        if(baseFile.exists()){

            if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q){
                directory?.let {
                    val targetFile = File(it.path+File.separator+targetFileName)
                    baseFile.copyTo(targetFile)
                }
            }else{
                uri?.let {
                    val outputStream: OutputStream? = contentResolver.openOutputStream(uri)
                    outputStream?.let{
                        val inputStream: InputStream = File(filePath).inputStream()
                        inputStream.copyTo(outputStream,1024)
                    }
                    values.clear()
                    values.put(MediaStore.Images.Media.IS_PENDING, 0)
                    contentResolver.update(uri,values,null,null)
                }
            }

            baseFile.delete()
        }
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57362150

复制
相关文章
Android Q 适配 之 存储新特性
https://mp.weixin.qq.com/s/aiDMyAfAZvaYIHuIMLAlcg
陈宇明
2020/12/16
1K0
Android 10(Q)/11(R) 分区存储适配
这些应用可能会在磁盘中存储大量文件,即使应用被卸载了还会依然存在。另外,这些应用还可能会读取其他应用的一些敏感文件数据。
字节流动
2020/08/28
2.4K0
Android 10(Q)/11(R) 分区存储适配
适用于高动态范围视频的码率控制算法简介
1.背景介绍 随着高动态范围(HDR,High Dynamic Range)概念的普及以及诸如OLED等技术上的进步,消费者市场对HDR设备呈现出极大的热情。相比4K带来的是更多细节和更加精细的纹理上的变化,HDR带来的则是在色彩呈现上更加生动的画面。HDR电视的最高亮度可达1000尼特,亮度的提升使得场景更加的真实。由于HDR相比标准动态分布(SDR,Standard Dynamic Range)拥有更广的亮度范围,因此将HDR的光信号转换为数字信息以进行编码相比传统SDR信号,也需要新一代的变换函数,比
用户1324186
2018/03/05
1.6K0
适用于高动态范围视频的码率控制算法简介
WordPress迁站方法
首先,将自己的网站文件夹打成压缩包,将数据库备份成.sql文件,一同下载到本地(如果迁站前后的域名在同一个服务器,直接放在别的地方就可以)这很简单就不给图了。
叮当叮
2020/04/20
1.4K0
WordPress迁站方法
如何迎接Android Q
在这里,我们可以获取Android新版本的相关信息,如本次Android Q Beta版本,我们可以获知它的几大特点。 ①隐私保护持续升级 在新版本Android Q中,Google添加了一些安全特性,如基于文件的加密、敏感信息的访问权限、摄像头/麦克风后台访问、锁定模式、加密备份等。给予了用户更多的地理位置控制,Android Q 允许用户指定应用从不、仅在使用期间 (运行时),或者任何时候 (退到后台) 都能获取位置信息。 ②用户互动新方式 Android Q针对智能设备的新趋势——折叠屏及大屏设备,进行了多项改进,并且在Android Q Beta2版本中引入了折叠屏模拟器。 ③网络连接 Android Q扩展了网络连接堆栈的功能,并添加了新的网络连接API。 ④摄像头、媒体及图像 ⑤神经网络 API 1.2 ⑥强化Android基础 ⑦Bubbles: 多任务管理新方法(Android Q Beta2版本) ⑧与公开API 兼容(Android Q Beta2版本)
用户5521279
2019/06/02
8110
Android 现有项目迁移到androidx
我在全新项目中用过androidx,也做过老项目迁移到androidx,所以,我想表达的是androidx其实没那么神秘,也没那么多坑,时至今日也一年多过去了,基本趋于稳定,未来也是大势所趋,所以,迁移是迟早的事。
yechaoa
2022/06/10
7410
Android 现有项目迁移到androidx
怎么将数据迁移到对象存储OSS?
用户希望将历史数据迁移到OSS上的用户目标存储桶。需要迁移的源数据可能来自某个OSS桶,也可能来自本地或第三方云存储(例如腾讯云COS)。等等,HTTP等。
用户7261497
2020/06/24
6.1K0
Android Q 手势导航背后的故事
新引入的手势导航是 Android Q 带来的主要变化之一。简而言之,采用这款新系统导航模式后,用户无需借助任何虚拟按键,只要滑动手势便能完成多种操作,包括: 返回上一级 (边缘侧滑),返回主屏 (从底部向上滑动)和启动设备助手 (从左下角或右下角斜向滑动)。
Android 开发者
2019/08/22
2.2K0
Android Q 手势导航背后的故事
Android Q 兼容那些事
5 月 20 号参加了 Android Q Labs,因此本篇说一说会议的部分内容以及自己的一些想法。
AndroidTraveler
2019/05/28
9970
Android Q 60 New Features
No more desert name — it's just Android 10 A true system-wide dark mode New swipe gestures replace the home, back, and recent apps buttons New gesture for screen pinning Project Mainline brings security updates to the Play Store Generic System Images can b
用户9732312
2022/05/13
3360
Android 11(Q)源码编译
参考官方文档https://source.android.google.cn/setup/build/initializing
用户2929716
2021/06/29
1.7K0
Android Q 文本新功能
文本显示是大部分应用的重要任务之一。为了帮助您打造更好的文本体验,我们在 Android Q 中引入多项新特性,在满足开发者需求的同时,持续提升应用性能。其中包括:
Android 开发者
2019/08/06
1.2K0
Android Q 文本新功能
android 数据存储<二>---- SharedPreferences实现数据的存储
2.本质就是就是以xml文件在应用程序所在包中存放数据。(/data/data/xxxx/sharePreferfence/xxx.xml)
用户4148957
2022/06/14
5K0
android 数据存储<二>---- SharedPreferences实现数据的存储
将docker的wsl存储文件转移到其他地方
缺省情况下,Windows上的docker的文件存放在user的"AppData\Local\Docker"下。
东风压倒西风
2022/10/21
1.5K0
Oracle从文件系统迁移到ASM存储
环境:RHEL 6.4 + Oracle 11.2.0.4 需求:数据库存储由文件系统迁移到ASM
Alfred Zhao
2019/05/24
9550
点击加载更多

相似问题

南迁失败

10

如何在Android 10中访问外部存储(Android Q)?

23

存储库同步:![rejected] android-q- -> -4 android-q--4(会撞坏现有标签)

23

ManyToManyField与南迁

20

南迁后无此列

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文