首页
学习
活动
专区
工具
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 的大多数子目录外,对所有内部存储目录⁠的写入权限。

83330

AndroidQ兼容性适配指南

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

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

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

    3.3K77

    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版本在外部存储空间需要写入权限,否则扫描会失败。

    65930

    安卓应用安全指南 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 用户创建的文档的标准目录

    69520

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

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

    1.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中的应用中运行。

    13K42

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

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

    2.2K10

    AndroidR兼容性适配指南

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

    2.1K20

    【专业技术】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开发笔记(三十二)文件基础操作

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

    1.2K10

    干货 | 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.7K20

    appium+python自动化51-adb文件导入和导出

    前言 用手机连电脑的时候,有时候需要把手机(模拟器)上的文件导出到电脑上,或者把电脑的图片导入手机里做测试用,我们可以用第三方的软件管理工具直接复制粘贴,也可以直接通过adb命令导入和导出。...adb shell 1.在导入和导出前先对adb shell基本操作熟悉下,cmd输入adb shell就能进入了,android的系统是基于linux系统开发的,adb shell就是进入shell模式...\ (不能直接导电脑根目录,得指定一个已经存在的文件夹) C:\Users\admin>adb pull /sdcard/DCIM/Camera/IMG_20180428_164205.jpg d:\img...,就不用指定文件名称了,到文件夹这一层目录就行,如/sdcard/DCIM/Camera/ adb pull /sdcard/DCIM/Camera/ d:\img adb push 1.把电脑的文件导入手机...,跟上面操作刚好相反 adb push [电脑路径] [手机路径] 2.如果想在手机上创建一个文件夹,可以进shell模式,用mkdir创建 C:\Users\admin>adb shell HWBND-H

    1.3K10

    Android Q 适配 之 存储新特性

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

    1K30

    Android的内部存储和外部存储怎么区分?

    1.定义   内部存储:内部存储位于Android手机系统的data/data/这个目录下,内部存储是私有的,主要用于存储系统和应用程序的某些数据,对于其他应用程序来说是不可见的,并且会随着应用程序的卸载而被删除...外部私有存储位于/storage/emulated/0/Android/data/包名这个目录下,它和内部存储一样是私有的,并且其他应用程序是无法访问的,会随着应用程序的卸载而被清除。        ...外部公有存储位于/storage/emulated/0目录下,例如Movies,Music,DCIM等等。...Environment.getExternalStorageDirectory() Environment.getExternalStoragePublicDirectory(String type)   参数type用于指定文件夹的类型...注:在Android10之后,不能再使用外部公有存储下的两个方法了,应用程序只能访问自己的外部私有目录,所以Android10之后尽量使用外部私有存储下的两个方法。

    78911

    unity中application(3D自动保存路径)

    app的独立数据存储目录下有三个文件夹:Documents,Library和tmp。 Documents目录,这个目录用于存储需要长期保存的数据,比如我们的热更新内容就写在这里。...需要注意的是,iCloud会自动备份此目录,如果此目录下写入的内容较多,审核的可能会被苹果拒掉。 Library目录,这个目录下有两个子目录,Caches和Preferences。...我把热更新的临时文件写在这里,等一个版本的所有内容更新完全后,再把内容转移到Documents目录。 Preferences用于应用存储偏好设置,用NSUserDefaults读取或设置。...公有目录是像DCIM、Music、Movies、Download这样系统创建的公共目录,当然你也可以像微信那样直接在sd卡根目录创建一个文件夹。好处嘛,就是卸载app数据依旧存在。...私有目录在/storage/emulated/n/Android/data/package name/,打开可以看到里面有两个文件夹cache和files。为什么跟内部存储目录重复了?

    1.1K20

    Unity3D各平台Application.xxxPath的路径

    app的独立数据存储目录下有三个文件夹:Documents,Library和tmp。 Documents目录,这个目录用于存储需要长期保存的数据,比如我们的热更新内容就写在这里。...需要注意的是,iCloud会自动备份此目录,如果此目录下写入的内容较多,审核的可能会被苹果拒掉。 Library目录,这个目录下有两个子目录,Caches和Preferences。...我把热更新的临时文件写在这里,等一个版本的所有内容更新完全后,再把内容转移到Documents目录。 Preferences用于应用存储偏好设置,用NSUserDefaults读取或设置。...公有目录是像DCIM、Music、Movies、Download这样系统创建的公共目录,当然你也可以像微信那样直接在sd卡根目录创建一个文件夹。好处嘛,就是卸载app数据依旧存在。...私有目录在/storage/emulated/n/Android/data/package name/,打开可以看到里面有两个文件夹cache和files。为什么跟内部存储目录重复了?

    90510
    领券