首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 10将文件写入公共DCIM目录,未弃用的方法

Android 10引入了一些变化,其中之一是对文件写入公共DCIM目录的方法进行了更新。在Android 10之前,可以使用Environment.getExternalStoragePublicDirectory()方法来获取公共DCIM目录,并将文件写入该目录。然而,在Android 10中,该方法已被弃用。

取而代之的是,应该使用MediaStore API来处理文件的写入。MediaStore API提供了一种更安全和可靠的方式来管理媒体文件。下面是一些关键步骤:

  1. 首先,确保在AndroidManifest.xml文件中添加了适当的权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 使用ContentResolver对象获取ContentValues实例,并设置文件的元数据信息,如文件名、文件类型、存储位置等:
代码语言:txt
复制
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, "my_image.jpg");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM);
  1. 使用ContentResolver对象插入文件,并获取文件的URI:
代码语言:txt
复制
ContentResolver resolver = getContentResolver();
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
  1. 打开输出流,并将文件内容写入到URI指定的位置:
代码语言:txt
复制
OutputStream outputStream = resolver.openOutputStream(imageUri);
// 将文件内容写入到输出流
outputStream.write(fileData);
outputStream.close();

通过以上步骤,文件将被写入到公共DCIM目录中。这种方法的优势在于,它提供了更好的安全性和权限控制,确保只有授权的应用程序才能访问和修改媒体文件。

对于腾讯云相关产品,可以使用腾讯云对象存储(COS)来存储和管理媒体文件。腾讯云COS是一种高可用、高可靠、低成本的云存储服务,适用于各种场景,包括媒体存储和分发。您可以通过以下链接了解更多关于腾讯云COS的信息:

请注意,以上答案仅供参考,具体实现方式可能因应用程序的需求和环境而有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android文件系统整理

内部存储空间 内部存储空间是 App 私有的存储数据存储空间,系统会阻止其他应用对这部分数据访问,并且在 Android 10(API 级别 29)及更高版本中,系统会对这些位置进行加密。...externalMediaDirs: /storage/emulated/0/Android/media/包名 2、外部公共目录 不要被这里“外部”这个词弄糊涂了。...getExternalStoragePublicDirectory: /storage/emulated/0 getExternalStorageDirectory 和 getExternalStoragePublicDirectory 已经被标记为...MANAGE_EXTERNAL_STORAGE 会授予以下权限: 对公共目录中所有文件读写权限。 对 MediaStore.Files 表内容访问权限。...除 /Android/data/、/sdcard/Android 和 /sdcard/Android 大多数子目录外,对所有内部存储目录写入权限。

77430

AndroidQ兼容性适配指南

在Scoped Storage新特性中,外部存储空间被分为两部分: ● 公共目录:Downloads、Documents、Pictures、DCIM、Movies、Music、Ringtones等 公共目录文件在...通过ContentResolverinsert方法多媒体文件保存在公共集合目录,不同Uri对应不同公共目录,详见3.2.1;其中RELATIVE_PATH一级目录必须是Uri对应一级目录...解决方法1: 参见使用MediaStore访问公共目录和使用SAF选择单个文件,使用MediaStore接口访问公共目录多媒体文件,或者使用 SAF访问公共目录任意文件。...解决方案: APP应该想要保留文件通过MediaStore接口保存到公共目录下,请参见使用MediaStore访问公共目录。...解决方案: APP应该修改保存文件方式,不再使用路径方式直接保存,而是采用MediaStore接口文件保存到对应公共目录下。

6.9K30

AndroidQ(10)分区存储完美适配方法

本篇主要是对AndroidQ(10)分区存储适配具体实现 要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录文件公共媒体文件 对于AndroidQ以下,还是使用老文件存储方式...作为存储相关运行时权限,但现在即使获取了这些权限,访问外部存储也受到了限制,只能访问自身目录文件公共内体文件。...APP私有目录 地址:/storage/emulated/0/Android/data/包名/files 私有目录存放app私有文件,会随着App卸载而删除。...需要targetVersion=29, //故该方法只可在Android10手机上执行 values.put(MediaStore.Downloads.RELATIVE_PATH, "Download...结合上面代码,我们主要是在公共目录下创建文件文件夹拿到本地路径uri,不同Uri,可以保存到不同公共目录中。

1.5K40

干货 | 携程Android 10适配踩坑指南

要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录文件公共媒体文件 Android Q版本以下机型,还是使用老文件存储方式 Android Q及以上版本机型,所有应用均需要分区存储...: 1)文件迁移 文件迁移是应用共享目录文件迁移到应用私有目录或者Android10要求media集合目录。...允许其他应用访问,并且应用卸载后不允许删除文件文件需要存储在共享目录,应用可以选择是否进行目录整改,文件迁移到Android10要求media集合目录。...主要是在公共目录下创建文件文件夹拿到本地路径uri,不同Uri,可以保存到不同公共目录中。...、IMEI等设备信息标识设备方法,从Android 10开始统统失效。

3.2K77

Android自动化测试中媒体文件操作技巧

Android自动化测试中媒体文件操作技巧 在进行Android自动化测试时,我们常常需要通过adb工具向设备内推送文件,例如推送视频文件到相册目录。...但是系统媒体扫描机制并不能实时识别新增文件,导致我们测试无法观察到文件变化。 为了优化效率,简化自动化测试流程,本文介绍如何使用adb强制触发媒体扫描方法,实现文件变化实时观察。.../sdcard/DCIM/camera/test.jpg //扫描整个目录 media scanner file /sdcard/DCIM/camera/ 这种方法仅扫描指定文件目录,适合我们已知文件位置...常用扫描目录广播命令: adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard/ 针对单个文件扫描命令...广播扫描只通知媒体数据库更新,不会刷新相册应用内存缓存,可能需要重新打开相册应用才能看到最新文件。 某些Android版本在外部存储空间需要写入权限,否则扫描会失败。

44230

安卓应用安全指南 4.6.3 处理文件 高级话题

BY-NC-SA 4.0 4.6.3.1 通过文件描述符文件共享 有一种方法可以通过文件描述符共享文件,而不是让其他应用访问公共文件。...此方法可用在内容供应器和服务中。 对方应用可以通过文件描述符读取/写入文件,这些文件描述符通过在内容供应器或服务中,打开私人文件来获得。...在上述两种文件共享方法中,这是很常见,因为向其他应用提供文件写入权限时,文件内容完整性很难得到保证。 当多个应用并行写入时,可能会破坏文件内容数据结构,导致应用无法正常工作。...[15] MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE在 API 17 和更高版本以及 API 24 和更高版本中,使用它们触发安全异常。...电影标准目录 DIRECTORY_DOWNLOADS 用户下载文件标准目录 DIRECTORY_DCIM 相机产生图片/视频文件标准目录 DIRECTORY_DOCUMENTS 用户创建文档标准目录

66820

Android 11 开发者常见问题: 存储 | FAQ・第二期

Android 10 设备上,除非在 manifest 中通过主动声明 requestLegacyExternalStorage 属性来选择停用分区存储,否则上述方法是无效。...无论是哪个目标 SDK,都无法在 Android 11 上通过存储访问框架访问 Android/data 和 Android/obb 目录。访问 官方文档 了解关于这些限制和测试相关行为方法。...分区存储中应用,是否仅限于文件写入其应用 data 目录上? 在分区存储中,应用可以 媒体项添加 到媒体存储集合。...媒体存储会根据文件类型,文件放置于组织有序文件夹中,例如 DCIM、Movies 和 Download 等。对于所有此类文件,应用可以继续通过文件 API 来访问。...得益于系统为每个媒体存储文件赋予了应用属性,应用不需要有存储权限也可以读写到它们最初提供给媒体存储文件。 Data Column 用之后,有没有对此功能其他使用建议?

1K10

Android 11 应用兼容性适配,看这篇就够了

分区存储存储空间分为两部分: ● 公共目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等 ■ 公共目录文件在App卸载后...SAF(Storage Access Framework)同样也禁止访问应用私有目录。 某些应用核心例需要访问大量文件,如文件管理操作或备份和恢复操作。...读写公共目录 App启动分区存储后,只能直接访问自身专属目录,所以Android 11,提供了两种访问公共目录方法(特殊直接路径访问参考1.3.8. 直接路径访问): 1.3.2.1....● 如果应用选择停用分区存储,并且请求 READ_EXTERNAL_STORAGE 权限,则用户会看到不同于 Android 10 对话框。该对话框会指示应用正在请求访问相册和多媒体。...此库之前已被,并已停止在Android 10应用中运行。

11.8K42

Android 10适配要点,作用域存储

()方法,并传入Uri对象来打开文件句柄,然后再调用BitmapFactorydecodeFileDescriptor()方法文件句柄解析成Bitmap对象即可。...调用ContentResolveropenOutputStream()方法获得文件输出流,然后Bitmap对象写入到该输出流当中即可。...其实方法都是相似的,因为不管是网络上图片还是关联目录图片,我们都能获取到它输入流,只要不断读取输入流中数据,然后写入到相册图片所对应输出流当中就可以了,示例代码如下: fun writeInputStreamToAlbum...第一种同时也是最简单一种方式,就是更改文件下载目录文件下载到应用程序关联目录下,这样不用修改任何代码就可以让程序在Android 10系统上正常工作。...以上几个限制条件如果不能满足你需求,那么就只能使用第二种方式,对Android 10系统进行代码适配,仍然文件下载到Download目录下。

2.1K10

AndroidR兼容性适配指南

(), filename) 访问公共媒体目录文件 使用MediaStore或者SAF(存储访问框架–Storage Access Framework); 访问其他应用中数据 为保护用户隐私,在搭载...分区存储中应用程序是否仅限于文件写入其特定于应用程序数据目录? 在分区存储中,应用程序可以媒体文件贡献给媒体商店收藏。...Media Store 会根据文件类型文件放入组织良好文件夹中,例如 DCIM、电影、下载等。对于所有此类文件,应用程序也可以继续通过文件 API 进行访问。...操作系统维护一个系统,应用程序归因于每个媒体存储文件,因此应用程序可以读取/写入它们最初贡献给媒体存储文件,而无需存储权限。 Media Store DATA 列已被,使用指南是什么?...在 Android 10 上,作用域存储环境中应用无法使用文件路径访问文件。为了与此设计保持一致,我们当时用了 DATA 列。

2K20

【专业技术】Android数据保存之文件保存

当你想要在内部存储写入一个文件时,首先要创建一个文件,可以通过File构造器,传入上面两个方法获取路径作为参数,很方便就能创建一个文件,例如: File file =newFile(context.getFilesDir...type)方法获取外部存储公共目录公共目录有几种类型,根据你输入type返回不同文件夹,type类型有: public static String DIRECTORY_ALARMS 标准铃声目录...public static String DIRECTORY_DCIM 相机拍照或录像文件存储目录 public static String DIRECTORY_DOWNLOADS 下载目录 public...另外,无论你哪一种方法创建应用程序外部存储文件,注意一下type类型正确性,以便于系统处理时候能够正确处理,比如你保存一个文件是铃声类型,在DIRECTORY_RINGTONES下,系统MediaScanner...注意:在你保存文件之前,你不需要检查可用空间,而是在写入文件时候捕获IOException,这种方法来代替空间大小检查,如果你不知道你需要多少空间。

2.1K60

Android开发实现保存图片到手机相册功能

有时候确实是保存成功了(通过IO流图片写入了SDCard),但打开相册却看不到那张图片,需要在文件管理软件上才能找到那张图片,在网上找了许多文章,貌似都保存不到相册那里,这应该就是手机品牌原因,有的品牌手机能显示在相册里...解决这种问题,最简单粗暴方法是,那台手机拍一张照片,然后找到它,查看它路径详情,直接根据路径IO流写入Android SDK Build.BRAND 变量为当前手机品牌,根据不同品牌来做兼容处理...另外值得一提是,图片格式需要为JPEG格式才能显示在相册中,我们拍照片也是JPEG格式。下面代码来实现上述想法。...鉴于目前手机版本普遍为Android 6.0 以上,读写外部存储文件都需要动态申请权限。这部分代码可以在当前需要读写外部存储文件Activity中写。...(this, PERMISSIONS,1); } 保存文件方法: public void SaveBitmapFromView(View view) { int w = view.getWidth

3.9K10

Android开发笔记(三十二)文件基础操作

File类 File类是java中文件操作工具类,它常用方法如下: File构造函数 : 根据文件路径构造File对象 delete : 删除文件 exists : 判断文件是否存在...getName : 获取文件文件名 getPath : 获取文件目录路径 getParent : 获取上级目录路径 isDirectory : 判断是否为目录/文件夹 isFile : 判断是否为文件...创建目录/文件夹 renameTo : 重命名文件,其实就是移动文件到指定目录 获取文件大小有两种方式,一种是使用File类length方法,另一种是使用FileInputStream类available...)路径 getExternalStoragePublicDirectory : 获得外部存储指定类型目录路径 DIRECTORY_DCIM : 相片存放目录(包括相机拍摄图片和视频) DIRECTORY_DOCUMENTS...} 点此查看Android开发笔记完整目录

1.1K10

适配AndroidQ拍照和读取相册图片实现方法

先讲一下咱们这节用到新特性 Android Q文件存储机制修改成了沙盒模式,类似于iOS 应用只能访问自己沙盒下文件公共媒体文件 如果有想具体了解Android Q新版特效可以去 官方文档 我们在这个地方记录一下...权限问题 Android Q不再需要申请文件读写权限,默认可以读写自己沙盒文件公共媒体文件。因为相册属于公共媒体文件,所以,Android Q 可以不用 再动态申请权限。...Q之前版本通用拍照代码,有需要可以直接复制就行 图片保存到沙盒内 沙盒里面操作文件不再需要申请权限 沙盒中新建文件夹只能再系统指定文件夹中新建 Android Q版本使用,图片存放到沙盒文件内...图片保存到公共文件夹 //------------------------- //拍照存放路径 //为了适配Android Q版本以下 File fileDir = new...存到公共文件操作,相对来说麻烦点,但是也还好。

2.6K11

android截图事件监听原理与实现

一般大家都会采用如下两种方法 1.监听截屏图片所在目录变化(FileObserver) 2.监听媒体库变化(ContentObserver) 上面两种方法均不是万能,需要结合使用才能达到良好效果...坑2:不同手机,监听目录并不一致。小米需要监听Environment.DIRECTORY_DCIM,其他监听Environment.DIRECTORY_PICTURES即可。...需要手动对子文件进行操作。 另外,当我们监听目录/文件被删除后又重新建立了一个同名目录/文件,之前FileObserver不会继续工作,需要重新设置监听才行。...可能有人会问,为什么不直接第二种方法? 原因有2,首先从坑5可以看出第二种方法也并非100%有效,其次,这种方法速度很慢,通常会有2-3秒延迟。而第一种方法如果有效,通常都会比后者快很多。...好了,障碍基本扫清,下面开始融合两种方法 首先使用成员变量记录截图文件路径 private static String sScreenshotPath; 当方法1或者方法2收到结果时,收到结果与

2.4K51

干货 | Trip.com Android 11 适配之旅

,下文暂且这三个阶段称为“兼容”、“已兼容“、”已适配“。... 2.2 唯一标识 从 Android 10 开始,Google 限制了对 IMEI 获取,Android 11 延续了隐私保护趋势,对其他有可能作为唯一标识方法进行了限制...2.3 分区存储 在 Android 11 之前版本,Android 文件存储可以分成以下几类: 1)内置存储里应用私有目录 2)外置存储里应用私有目录 3)外置存储里媒体文件 4)外置存储里文件...Android 11设备无法通过ADB写入外置存储应用私有目录 APP 文件导出需要一致 具体来说,只要是升级到 Android 11 设备,ADB便无法直接读写外置存储应用私有目录了,这属于文章开头定义..., 然后把配置文件写入,修改 APP 代码,兼容该目录读取,最后给自动化流程内增设一个参数重置环节。

1.6K20

Android Q 适配 之 存储新特性

解决方案:APP 自身 App-specific 目录下新建文件方法文件路径;如果要在公共目录下新建文件,使用 MediaStore 接口;如果要在任意目录下新建文件,需要使用 SAF。...解决方法 1:使用 MediaStore 接口访问公共目录多媒体文件,或者使用 SAF 访问公共目录任意文件。...解决方法 2:使用 SAF 向用户申请文件目录读写权限。...问题分析:在 Android Q 上,卸载 APP 默认删除 App-specific 目录数据。 解决方案:APP 应该想要保留文件通过 MediaStore 接口保存到公共目录下。...解决方案:APP 应该修改保存文件方式,不再使用路径方式直接保存,而是采用 MediaStore 接口文件保存到对应公共目录下。

99330
领券