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

如何在安卓Q中将文件从app专用文件夹( file :// scheme)拷贝到MediaStore图片集(content:// scheme)?

在安卓Q中,可以通过以下步骤将文件从app专用文件夹(file:// scheme)拷贝到MediaStore图片集(content:// scheme):

  1. 首先,需要获取文件的Uri。可以使用FileProvider来获取文件的content:// scheme Uri。在AndroidManifest.xml文件中添加FileProvider的配置:
代码语言:txt
复制
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.myapp.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

其中,authorities属性指定了FileProvider的授权标识,resource属性指定了文件路径的配置文件。

  1. 在res/xml目录下创建file_paths.xml文件,用于配置文件路径:
代码语言:txt
复制
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images" path="images/"/>
</paths>

这里配置了一个文件路径,将app专用文件夹下的images文件夹作为可访问的路径。

  1. 在代码中使用FileProvider获取文件的Uri:
代码语言:txt
复制
File file = new File(getFilesDir(), "images/my_image.jpg");
Uri fileUri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", file);

这里假设要拷贝的文件是my_image.jpg,位于app专用文件夹下的images文件夹。

  1. 使用ContentResolver将文件拷贝到MediaStore图片集:
代码语言:txt
复制
ContentResolver resolver = getContentResolver();
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_PICTURES);
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

try {
    OutputStream outputStream = resolver.openOutputStream(imageUri);
    InputStream inputStream = getContentResolver().openInputStream(fileUri);
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }
    outputStream.close();
    inputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

这里使用ContentValues来设置拷贝到MediaStore的图片的属性,包括文件名、MIME类型和相对路径。然后通过ContentResolver的insert方法插入一条新的图片记录,并获取到对应的Uri。最后,通过输入输出流将文件内容从app专用文件夹拷贝到MediaStore图片集。

需要注意的是,拷贝文件到MediaStore需要WRITE_EXTERNAL_STORAGE权限。

以上是在安卓Q中将文件从app专用文件夹拷贝到MediaStore图片集的步骤。对于更多关于安卓开发、文件操作、媒体处理等方面的知识,可以参考腾讯云的移动开发相关产品和文档:

  • 腾讯云移动开发产品:https://cloud.tencent.com/product/mobile
  • 腾讯云移动开发文档:https://cloud.tencent.com/document/product/876
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 笔记 | Xamarin

    Docs 关于xamarin.forms Android创建文件与写文件 (ftp) - 懒猫口米 - 博客园 外部读写 应用可以在外部存储上保留两种不同类型的文件专用 文件专用文件是特定于应用程序的文件...Android 期望专用文件存储在外部存储上的特定目录中。 尽管这些文件称为“专用”,但它们仍然可见,并且可由设备上的其他应用访问,Android 并没有对它们提供任何特殊保护。...// 专用外部存储目录 // /storage/emulated/0/Android/data/com.companyname.app/files/ Android.Content.Context.GetExternalFilesDir...这意味着在进行任何文件访问之前都应执行运行时权限请求。 应用会被自动授予读取和写入其自己的专用文件的权限。 在用户授予了权限之后,应用可以读取和写入属于其他应用的专用文件。...首先,需要在清单文件内加入以下权限: 8

    24K20

    targetSdk27 FileProvider 摄像和照相

    ); // MediaStore.EXTRA_VIDEO_QUALITY 表示录制视频的质量, 0-1,越大表示质量越好,同时视频也越大 intent.putExtra...而 Android N 开始,将不允许在 App 间,使用 file:// 的方式,传递一个 File ,否者会抛出 FileUriExposedException的错误,会直接引发 Crash。...但是,既然官方对文件的分享做了一个这么强硬的修改(直接抛出异常),实际上也提供了解决方案,那就是 FileProvider,通过 content://的模式替换掉 file://,同时,需要开发者主动升级...当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的媒体文件audio,video,图片等,将相应的信息放到定义好的数据库表格中。...再试下,还是不行~~~~ Uri uri = new Uri.Builder() .scheme("content")

    92210

    AndroidQ兼容性适配指南

    ,并限制文件混乱的情况,Android Q修改了APP访问外部存储中文件的方法。...在分区存储模型下,SD卡的公共目录是不让访问的,除了共享媒体的那几个文件夹。...注意:MediaStore接口中查询到的DATA字段将在Android Q开始废弃,不应该利用它来访问文件或者判断文件是否存在; MediaStore接口或者SAF获取到文件Uri后,请利用Uri打开...无法访问图片文件中的地理位置数据 问题原因: 直接图片文件输入流中解析地理位置数据。 问题分析: 由于图片的地理位置信息涉及用户隐私,Android Q上默认不向APP提供该数据。...设备Android Q之前的版本升级到Android Q,已安装的APP获得Legacy View视图。

    7.1K30

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

    要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录下的文件和公共媒体文件 Android Q版本以下机型,还是使用老的文件存储方式 Android Q及以上版本机型,所有应用均需要分区存储...2)文件访问兼容性 共享目录文件不能够通过File path方式读取,需要使用MediaStore API或者Storage Access Framework框架进行访问。...1)获取(创建)私有目录下的文件夹 //在自身目录下创建apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2)创建私有目录文件 生成需要下载的路径...(external, values); return insertUri; }else{ ... } 4)在共享目录指定文件夹下创建文件 主要是在公共目录下创建文件文件夹拿到本地路径...而且,无论你的App是否适配过Android Q(既targetSdkVersion是否大于等于29),均无法再获取到设备IMEI等设备信息。

    3.3K77

    Android Q 适配 之 存储新特性

    背景说明 本文档是基于谷歌 Q 的 beta4 版本的变更输出的兼容性整改指导,如果后续 beta 版本有新的变更和新的特性,我们也会刷新文档的相关章节内容,请开发者持续关注。 2....注意: MediaStore 接口中查询到的 DATA 字段将在 Android Q 开始废弃,不应该利用它来访问文件或者判断文件是否存在; MediaStore 接口或者 SAF 获取到文件 Uri...2.2.3 无法正确分享文件 问题原因:APPApp-specific 目录中的私有文件分享给其他 APP 时,使用了 file:// 类型的 Uri。...解决方案:使用 FileProvider,将 content:// 类型的 Uri 分享给其他 APP。 2.2.4 无法修改存储设备上的文件 问题原因 1:直接使用路径访问公共目录文件。...设备 Android Q 之前的版本升级到 Android Q,已安装的 APP 获得 Legacy View 视图。

    1K30

    二次元看过来!基于 Serverless 的舞萌音游查分器

    之前版本会根据 requirements.txt 自动下载第三方库到项目目录下的 .serverless 文件夹下的 requirements 文件夹以参加最终的依赖打包,压缩成 zip 文件再最终上传至云函数运行环境...,避免第三方库导致本地文件夹管理混乱。...若需使用或访问的文件 file,放置在创建层时压缩文件的根目录下。则在解压加载后,可直接通过目录 /opt/file 访问到该文件。...若在创建层时,通过文件夹进行压缩 dir/file,则在函数运行时需通过 /opt/dir/file 访问具体文件 体验更快的部署速度吧!...= ProxyFix(app.wsgi_app, x_proto=1, x_host=1) 但是是X-Forwarded-Proto中取的值,apigw中其为http,因此并不能直接使用这个ProxyFix

    1.2K30

    Android 10(Q)11(R) 分区存储适配

    其中,对共享目录的权限进行了细分: 无需申请权限的操作:通过 MediaStore API对媒体集、文件集进行媒体/文件的添加、对自身APP创建的 媒体/文件 进行查询、修改、删除的操作。...不过,您也可以转而选择使用以下任一 API 直接访问媒体文件File API。原生库,例如 fopen()。 简单来说就是,可以通过 File() 等API 访问有权限访问的媒体集了。...文件集 (通过 SAF)1)创建文档 注:创建操作若重名的话不会覆盖原文档,会添加 (1) 最为后缀, document.pdf -> document(1).pdf。...Q:我可以在媒体集文件夹下创建文档,就可以避开权限的问题了? A:官方文档上写了只能创建相应类型的媒体/文件,具体如何限制的,没有说明。...总结 Android 10提出分区存储之后到现在已经一年多了,所以Google 强制推行的态度到现在 targetSDK >=30 才强制启用分区存储来看,Google 还是渐渐地选择给开发者留更多的时间

    2.3K30

    开发开发规范手册V1.0

    开发开发规范手册V1.0 之前发布过一份Web安全开发规范手册V1.0,看到收藏文章的读者挺多,发现整理这些文档还挺有意义。...最近周末抽了些时间把之前收集关于安全开发的资料也整理了一下,整理出一份安全开发手册,大部分内容都是在一些博客看到各位师傅的分享。...1.3 protectionLevel属性设置 由于对app的自定义permission的protectionLevel属性设置不当,会导致组件(content provider)数据泄露危险...过滤限制跨域访问,对访问的目标文件的路径进行有效判断 使用decode()先对Content Query Uri进行解码后,再过滤可通过...../实现任意可读文件的访问的Uri字符串; 设置权限来进行内部应用通过Content provider的数据共享 使用签名验证来控制Content provider共享数据的访问权限,设置protectionLevel

    1.7K00

    App磁盘沙盒工具实践

    对缓存文件处理 支持查看file文件列表数据,打开缓存文件查看数据详情。还可以删除缓存对应的文件或者文件夹,并且友好支持分享到外部。...点击file文件夹,则拿到对应的文件列表,然后展示。点击file直到是具体文件(文本,图片,db,json等非file文件夹)跳转详情。...-->存储.pdf类型等文件 第二种:App外部私有目录 Android/data/--->存储各个App的外部私有目录。...之前文件创建弊端如下 卸载App也不能删除该目录下的文件 在设置里"清除数据"或者"清除缓存"并不能删除该目录下的文件 App可以随意修改其它目录下的文件修改别的App创建的文件等,不安全 为什么要在...://com.yc.lifehelper.fileExplorerProvider/external_path/fileShare.txt //content 作为scheme

    1.7K30

    Intent组件

    Android页面之间的跳转可以分为几类,比如有A和B两个页面,A页面直接跳转到B页面,这样的跳转比较简单,或者A页面跳转到B页面但是需要传送数据。...对于不同的动作,其URI数据的类型是不同的(可以设置type属性指定特定类型数据),ACTION_EDIT指定Data为文件URI,打电话为tel:URI,访问网络为http:URI,而由content...如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto:) 进行匹配。...q=my+street+address      8. //geo:0,0?q=business+near+city      9....          it.setType("audio/mp3");          startActivity(it);         Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI

    79260
    领券