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

Android:需要下载文件夹Uri而不是路径

Android中,如果需要下载文件夹,我们需要使用文件夹的Uri而不是路径。Uri是一种标识资源的统一资源标识符,它可以用来表示文件、内容提供器、网络地址等。

使用Uri而不是路径的主要原因是,Android系统中的文件路径是动态的,不同的设备和Android版本可能会有不同的文件路径结构。而Uri可以提供一种统一的方式来访问文件夹,无论是在本地存储还是在网络上。

要获取文件夹的Uri,可以使用以下步骤:

  1. 首先,需要使用File类来获取文件夹的实例。例如,如果要获取SD卡上的文件夹,可以使用以下代码:
代码语言:txt
复制
File folder = new File(Environment.getExternalStorageDirectory(), "folder_name");
  1. 接下来,需要将文件夹的实例转换为Uri。可以使用FileProvider类来进行转换。FileProvider是一个特殊的内容提供器,它可以为文件提供安全的访问权限。
代码语言:txt
复制
Uri folderUri = FileProvider.getUriForFile(context, "com.example.fileprovider", folder);

其中,com.example.fileprovider是你的应用程序的包名,可以根据实际情况进行修改。

  1. 现在,你可以使用获取到的文件夹Uri进行下载操作了。可以使用DownloadManager类来进行文件下载。以下是一个简单的示例:
代码语言:txt
复制
DownloadManager.Request request = new DownloadManager.Request(folderUri);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "folder_name");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);

在上面的示例中,我们将文件夹的Uri设置为下载请求的源,并指定下载后的目标文件夹和文件名。还可以根据需要设置其他下载参数,例如显示下载通知等。

需要注意的是,为了使用FileProvider类,需要在应用的清单文件中进行相应的配置。可以参考官方文档了解更多详细信息:https://developer.android.com/reference/android/support/v4/content/FileProvider

总结起来,Android中如果需要下载文件夹,我们应该使用文件夹的Uri而不是路径。通过使用Uri,可以实现跨设备和Android版本的兼容性,并且可以使用FileProvider类来提供安全的文件访问权限。

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

相关·内容

Android11 无Root 访问data目录实现、Android11访问data目录、Android11解除data目录限制、Android11 data空白解决

https://www.coolapk.com/apk/com.magicalstory.cleaner 软件下载 欢迎安卓手机用户下载使用 和 Android开发者下载预览功能的实现。...(除Android/data目录) 如有需要,请在清单声明不启用沙盒存储 android:preserveLegacyExternalStorage="true" android...()方法就可以了,这个方法说的是从一个文件夹URI生成DocumentFile对象(treeUri就是文件夹URI) 当然还有其他方法: DocumentFile.fromSingleUri();...我们不是获取了Android/data目录的权限了吗? 明明说好的获取该目录的权限后拥有该文件夹及所有子文件的读写权限的!...现在是不是觉得谷歌官方解释: 获取该目录的权限后拥有该文件夹及所有子文件的读写权限的! 是放屁?确实是!

10.1K20

Android7.0后FileProvider升级安装包导致FileUriExposedException的异常

--path:需要临时授权访问的路径(.代表所有路径),属性值不能使用具体的独立文件名,只能是目录名--> <!.../storage/emulated/0/Android/data/com.bo.view/cache/myApkFile/;如果有多个需要共享的文件则添加多个。...path 属性用于指定apk所在的文件夹名,与步骤4中设置的对应,不要弄错了。 name 属性告诉 FileProvider 为共享路径创建一个别名为 apk 的路径字段,可任意。...context) { //此处file应为apk下载的完整路径文件,这里下载在了外部存储的私有缓存文件夹下, // 你可以选择其他存储地址如:外置SD卡等,但是要注意与...的处理 下载安装APK(兼容Android7.0) Android文件存储知识

2.4K31

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

这里需要注意:在适配AndroidQ的时候还要兼容Q系统版本以下的,使用SDK_VERSION区分 背景 存储权限 Android Q仍然使用READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE...APP私有目录 地址:/storage/emulated/0/Android/data/包名/files 私有目录存放app的私有文件,会随着App的卸载删除。...apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2、创建自身目录下的文件 生成需要下载路径,通过输入输出流读取写入 String...insertUri = resolver.insert(external, values); return insertUri; 4、公共目录下的指定文件夹下创建文件 结合上面代码,我们主要是在公共目录下创建文件或文件夹拿到本地路径...,但不可直接使用路径访问 可以读其他APP创建的媒体类文件,删改操作需要用户授权 File 可读写APP自己创建的文件,但不可直接使用路径访问 不可读写其他APP创建的非媒体类文件 Downloads

1.4K40

Android | 作用域存储适配

,将 File 转换成 Uri 对象,这个 uri 对象表示这本地真实路径。...但是这个文件夹中的文件会随着应用卸载被随之删除。 ​ 那如果需要访问其他目录怎么办呢,比如获取相册中的图片,向相册中添加一张图片。...拍照完成后,拿到对应的 uri 如果要直接显示图片,则通过 uri 可直接加载 如果图片要上传,则需要uri 处理为一个 file 对象 ​ 在 10.0 中,只能访问沙箱文件和共享文件夹...,需要注意的是:共享文件夹可以通过 uri 进行访问,如拿到输入/输出流等。...下载文件 1,如果是 10.0,需要根据共享文件夹创建一条文件地址的 uri,用于保存文件 2,通过网络操作,拿到对应的 inputSteam 3,通过 contentProider 将 uri

67720

Android 一起来看看 7.0 的新特性 FileProvider

2、指定可分享的文件路径 FileProvider 只能为指定的目录中的文件生成内容 URI。要指定目录,就必须使用 元素的子元素在 XML 中指定其存储区域和路径。...例如,以下路径元素告诉 FileProvider,你打算为私有文件区域的 images/ 子目录 请求内容 URI <paths xmlns:android="http://schemas.android.com...总不能使用文件路径吧,那不是骗自己么 所以,需要一个虚拟的路径对文件路径进行映射,所以需要编写个 xml 文件,通过 path 以及 xml 节点确定可访问的目录,通过 name 属性来映射真实的文件路径...三、总结 Android 7.0 禁止在应用外部公开 file:// URI,所以我们必须使用 content:// 替代 file://,这时主要需要 FileProvider 的支持,因为 FileProvider...是 ContentProvider 的子类,所以需要在 AndroidManifest.xml 文件中进行注册,而又因为需要对真实的 filepath 进行映射,所以需要编写一个 xml 文档,用于描述可使用的文件夹目录

1.5K40

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

权限问题 Android Q不再需要申请文件读写权限,默认可以读写自己沙盒文件和公共媒体文件。因为相册属于公共媒体文件,所以,Android Q 可以不用 再动态申请权限。...拍照 图片正常保存 拍照:Android Q之前版本使用的,将图片保存到指定文件夹,拍照完成后需要通知相册刷新 拍照代码 // 拍照存放路径 File fileDir = new File(...,有需要的可以直接复制就行 将图片保存到沙盒内 沙盒里面操作文件不再需要申请权限 沙盒中新建文件夹只能再系统指定的子文件夹中新建 Android Q版本使用,将图片存放到沙盒文件内,图库无法刷新,无法显示...将图片保存到公共文件夹 //------------------------- //拍照存放路径 //为了适配Android Q版本以下 File fileDir = new...//RELATIVE_PATH是相对路径不是绝对路径 //DCIM是系统文件夹,关于系统文件夹可以到系统自带的文件管理器中查看,不可以写没存在的名字 contentValues.put

2.6K11

Android适配全面总结(二)----版本适配

. ---- 二、Android6.0的动态权限介绍 因为Android6.0(API23)开始需要动态申请权限,需要手动申请的权限有8组(短信、电话、联系人、存储、位置、麦克风、日历、相机),共24个...--相当于 Context.getExternalCacheDir()下边的path文件夹--> (三)添加路径信息到provier <provider android:name="android.support.v4...(由于Android6.0开始要动态申请权限,所以别忘了,这里就不写了,主要讲FileProvider的使用) //适配7.0的fileprovider,imgfile是图片文件路径 public void...//imgfile是图片文件路径 uri = Uri.fromFile(imgFile); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT...在运行 Android 8.0 或更高版本的设备上使用此权限时,恶意下载程序将无法骗取用户安装未获得预先授权的应用,所以我们需要加入安装apk文件的权限。

2.3K10

Bugly升级SDK适配Android N

发现这个问题之后呢,我自然尝试复现一下,由于没有Android 7.0的真机,我就在优测线上租用了一个7.0设备,发现我们SDK在Android 7.0在下载文件完成安装的时候就出现问题了。...Android N已经给出明确解决方案,如果你的程序需要在应用间共享文件,您应发送一项 content://URI,并授予 URI 临时访问权限。...我们可以看到在provider中需要配置相应的meta-data,这个是共享文件的路径,在res目录下新建xml文件夹并新建对应的xml文件(如下面的provider_paths),如下所示: ?...可以看到我配置了两个external-path,这两个路径都是beta下载的文件可能存在的路径,举个例子,第一个路径存在的uri如下: content://com.bugly.upgrade.demo.fileProvider...例如: /storage/emulated/0/Android/data/com.bugly.upgrade.demo/cache 通过FileProvider获取Uri路径 示例代码: Uri uri

82320

Android7.0适配之FileProvider

crash是不是很方~ 原因在官网已经给了解释: 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI...总不能使用文件路径吧,那不是骗自己么~ 所以,需要一个虚拟的路径对文件路径进行映射,所以需要编写个xml文件,通过path以及xml节点确定可访问的目录,通过name属性来映射真实的文件路径。...//authorities/定义的name属性/文件的相对路径,即name隐藏了可存储的文件夹路径。...五、总结 终于将知识点都涵盖到了~ 总结下,使用content://替代file://,主要需要FileProvider的支持,因为FileProvider是ContentProvider的子类,所以需要在...AndroidManifest.xml中注册; 而又因为需要对真实的filepath进行映射,所以需要编写一个xml文档,用于描述可使用的文件夹目录,以及通过name去映射该文件夹目录。

1.6K40

Android图片或拍照选择图片功能实例代码

在res文件夹下创建xml文件夹,xml文件夹下面再创建拍照图片的存放路径,名称可以随便起,但是要记得取的时候要一致。...path="." / </paths 然后需要在manifest中引用当前的路径,如下: <provider android:name="android.support.v4.content.FileProvider...); } else { uri = Uri.fromFile(file); } //这里尽量还是要保证URI不要为空,否则报空指针异常 return uri; } 注意: android...(Activity activity, Uri uri, Uri outputUri) { //打开系统自带的裁剪图片的intent Intent intent = new Intent("com.android.camera.action.CROP...图片或拍照选择图片(本地下载) 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。

98720

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

一般大家都会采用如下两种方法 1.监听截屏图片所在目录变化(FileObserver) 2.监听媒体库的变化(ContentObserver) 上面两种方法均不是万能的,需要结合使用才能达到良好的效果..., true, CONTENT_OBSERVER); 坑3:实践中发现,并不是所有手机都是监听相同的Uri,有的带数字,有的不带。...第一种方法如果有效,通常都会比后者快很多。...这里我做了一个特殊处理,在判断是否是同一个文件时,只判断文件名,不去管文件的完整路径也不管文件是否隐藏(也就是不比较文件名前面的“.”)...//仅靠文件名不是路径判断是否为同一个截图文件,因为有些系统对截图有move操作 private static boolean isSameFile(String newPath) { if

2.4K51

Android 允许其他应用启动您的Activity

三、只打开指定文件类型   这里还有一个问题,我现在的app可以打开任何文件,但是这并不是最优的解决方法,因为我的文件类型是自定义的,mimeType无法匹配到,因此我们需要先打开所有文件格式类型,然后通过匹配符只打开指定的文件格式...\..*\\.hex" /> 我这里设置打开hex格式文件,代码添加位置如下所示: 这里添加了很多的路径,因为要做文件夹匹配,现在你再运行一下,然后你通过微信收到的文件,点击其他应用打开,你会发现如果不是...四、获取文件的路径   当我们通过这种方式打开自己App的时候,在Activity中是会收到一个Uri的,我们可以通过Uir拿到文件的路径。...path } } 这就是非常简单的代码,没啥好说的,下面运行一下看看: 你可以看到控制台也打印了路径: 五、文件写入   光是知道这个文件的路径还是不够的,要想操作这个文件,我们需要将此文件从微信的应用文件夹中写入到自己的应用目录下...能拷贝过来,这样做你可以不用任何权限,也不需要配置FileProvider。只不过你应用文件夹下的文件,当然的App被卸载掉时会清除。

99950

Activity跳转之scheme跳转法

Activity能被其他应用或者网页所打开,需要在AndroidManifest中进行配置(浏览网页的时候点击一些广告可以进对应的app大概就是这个原理) <activity android:name=...开头 :// 主机名 : 端口号 / [路径/参数] 路径后面拼接参数也是可以的下面会用到。...WebView控件,并让它加载assets文件夹中的html文件 布局文件代码: <WebView android:id="@+id/web" android:layout_width=..."match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" / assets文件夹中的...在网页中只需要使用一个超链接便可以轻松的跳转至我们的app,是不是很开心。当你将这个html文件使用手机的浏览器查看时,点击也是一样可以跳转进app的 跳转页面的时候还可以通过 ?

1.8K20

一次关于Flutter的碰壁 | VSCode中搭建开发环境(插件 | 虚拟机 | 新建项目并运行)

下载完: ? 配置环境变量 解压, ? 进入解压好的文件夹中的bin目录,点击地址栏,复制路径,待会儿用于配置环境变量: ?...到桌面--右键“此电脑”--点击属性--高级系统设置--环境变量--系统变量栏--点击Path,新建一个环境变量,把刚刚复制的路径加进来--确定--确定--确定: ?...该命令用于检测flutter环境的相关搭建情况, 总共有红色、绿色、黄色三种输出信息; Android Studio 安装插件(这里仅做步骤参考,实际应该用AS3.0+进行操作) ? ?...[uri_does_not_exist] 对于这种情况其实很好解决, 重启VSCode即可。 点击下图箭头指向处: ?...会弹出在AS创建过的虚拟机(也建议在AS中创建虚拟机,不是在VSCode这里创建虚拟机,因为这里新建虚拟机是不会有选项的,AS不一样,有诸多选项可选): ?

2.5K30

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

关联目录对应的路径大致如下: /storage/emulated/0/Android/data//files 将数据存放到这个目录下,你将可以完全使用之前的写法来对文件进行读写,不需要做任何变更和适配...目前Android 10系统对于作用域存储适配的要求还不是那么严格,毕竟之前传统外置存储空间的用法实在是太广泛了。...这就有很多种办法了,比如使用Glide来加载图片,它本身就支持传入Uri对象来作为图片路径: Glide.with(context).load(uri).into(imageView) 如果你没有使用...Android 10开始,我们已经不能以绝对路径的方式访问外置存储空间了,所以文件下载功能也会受到影响。 那么该如何解决呢?主要有以下两种方式。...这个情况确实是存在的,比如我之前使用的七牛云SDK,它的文件上传功能要求你传入的就是一个文件的绝对路径不支持传入Uri对象,大家应该也会碰到类似的问题。

2.1K10

Hadoop Installation - Single Node Setup

[cn]田俊童鞋的Hadoop的安装部署与配置 1.下载部分 (0)你肯定不是安装到本地的啦,先安装VMware吧,我会告诉你这货需要序列号吗?...-bin.tar.gz 2.配置Java环境 [该部分直接摘自我之前Android和OpenCV开发中的配置] ①下载Oracle JDK,下载的版本是JDK1.7.0_40 ②下载之后解压即可,解压路径为.../home/xface/android/jdk1.7.0 ③打开终端,输入sudo gedit /etc/profile,在文件末尾添加下面内容 JAVA_HOME=/home/xface/android...,然后重命名为hadoop,接着修改文件夹所有者 mv hadoop-1.2.1 hadoop chown -R hduser:hadoop hadoop (5)修改文件/etc/profile中系统环境变量的配置...A URI whose scheme and authority determine the FileSystem implementation.

45940
领券