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

Android Q-如何获取外部SD卡公共下载目录路径

Android Q引入了一些变化,包括对外部SD卡访问权限的限制。在Android Q及更高版本中,应用程序无法直接访问外部SD卡的公共下载目录路径。相反,应用程序需要使用媒体存储访问框架(MediaStore Access Framework)来获取外部SD卡上的文件。

以下是在Android Q中获取外部SD卡公共下载目录路径的步骤:

  1. 确定应用程序是否具有访问外部存储的权限。在AndroidManifest.xml文件中添加以下权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 使用媒体存储访问框架(MediaStore Access Framework)查询外部SD卡上的下载目录。可以使用以下代码获取外部SD卡上的公共下载目录路径:
代码语言:txt
复制
String[] projection = {MediaStore.Downloads._ID, MediaStore.Downloads.DISPLAY_NAME};
Uri downloadsUri = MediaStore.Downloads.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(downloadsUri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
    int idColumn = cursor.getColumnIndex(MediaStore.Downloads._ID);
    int nameColumn = cursor.getColumnIndex(MediaStore.Downloads.DISPLAY_NAME);
    do {
        long fileId = cursor.getLong(idColumn);
        String fileName = cursor.getString(nameColumn);
        // 处理文件ID和文件名
    } while (cursor.moveToNext());
    cursor.close();
}

请注意,上述代码仅获取外部SD卡上的下载目录中的文件信息。要访问文件本身,您需要使用文件URI和ContentResolver。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求和业务场景进行评估。

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

相关·内容

Android开发中使用外部应用获取SD状态的方法

本文实例讲述了Android开发中使用外部应用获取SD状态的方法。...// 手机正在扫描sd过程中的状态 在做android开发对sd操作时,最好是sd处于Environment.MEDIA_MOUNTED状态时,对sd上的文件进行操作,其他状态不宜进行操作。...()获得当前sd状态 外部应用获取SD状态 像是从android4.0以后,外部应用就无法通过android标准接口获取SD状态,但是可以通过如下方法获取: 1....通过env 获取SD路径 String externalStorage = System.getenv("SECONDARY_STORAGE"); ​2....相关内容感兴趣的读者可查看本站专题:《Android编程开发之SD操作方法汇总》、《Android文件操作技巧汇总》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结

1.6K20
  • 【错误记录】Android 分区存储下的 SD 应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 开发时 , 需要向外置 SD 中拷贝一些文件 , 应用读取这些文件 , 进行相关配置 ; 但是 Android 系统 , 并不会主动为应用创建文件..., 外置 SD 的应用专属外部存储空间目录 , 需要开发者自己创建 ; 当前的包名是 com.example.filepath ; android { defaultConfig {...applicationId "com.example.filepath" } } 在 SD 目录Android\data 目录下 , 并没有 com.example.filepath 目录..., 说明 Android 系统并不是自动为每个应用都创建一个应用专属外部存储空间目录 ; 二、解决方案 ---- 在应用中 , 获取 应用专属外部存储空间目录 下的 cache 目录 , 如果没有创建该目录...; 该目录路径是 /storage/emulated/0/Android/data/com.example.filepath/cache ; /** * 应用专属外部存储空间目录下的

    63010

    Android文件系统整理

    1、App 私有目录 App 的私有目录指其他应用可以访问当前应用该目录下的数据,应用卸载后也会随之删除。 公共目录外部可以自由访问,应用删除后这部分存储的数据不会删除。...externalMediaDirs: /storage/emulated/0/Android/media/包名 2、外部公共目录 不要被这里的“外部”这个词弄糊涂了。...传统上这是一张 SD ,但它也可以作为设备中的内置存储实现,与受保护的内部存储不同,并且可以作为文件系统安装在计算机上。...外部公共目录可以通过以下函数获取 Environment.getExternalStorageState() // SD 状态 Environment.getExternalStorageDirectory...() // 获取用户数据目录路径 Environment.getDataDirectory() // 获取用户缓存目录路径 Environment.getDownloadCacheDirectory

    81330

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

    getName : 获取文件的文件名 getPath : 获取文件的目录路径 getParent : 获取上级目录路径 isDirectory : 判断是否为目录/文件夹 isFile : 判断是否为文件...中获取各种目录信息的工具,主要方法如下: getDataDirectory : 获得系统data目录路径 getDownloadCacheDirectory : 获得下载缓存目录路径 getExternalStorageState...(即SD)的路径 getExternalStoragePublicDirectory : 获得外部存储指定类型目录路径 DIRECTORY_DCIM : 相片存放目录(包括相机拍摄的图片和视频)...SD操作 app操作SD时需增加如下处理: 1、在AndroidManifest.xml中增加SD的权限配置 2、代码中操作SD需要先判断当前SD是否已挂载。

    1.2K10

    你真的知道APP缓存目录的内幕吗

    比较老的手机,有一个手机内部存储,还有一个SD存储,就是分别对应这两种存储位置,因为以前的SD是可以扩展的,即可拆卸的,所以可以用是否可拆卸作为内外存储的分类标准。...但是现在最新的设备,比如小米、锤子、华为等,都取消了可拆卸的SD,直接与机身焊接在一起,分为16G、32G版本,所以现在内外存储的分类不再以是否可拆卸作为标准,而是以下面的几方面作为新的标准: 首先我们分别介绍下...这个方法不是Context的方法,而是Environment的两个方法,第一个方法获取到的其实是外部存储的根目录,而第二个方法获取到得则是外部存储的公共目录。...{ Log.e(LOG_TAG, "Directory not created"); } return file; } 4.其他实用API getFilesDir() 获取在其中存储内部文件的文件系统目录的绝对路径...而缓存是程序运行时的临时存储空间,它可以存放从网络下载的临时图片,从用户的角度出发清除缓存对用户并没有太大的影响,但是清除缓存后用户再次使用该APP时,由于本地缓存已经被清理,所有的数据需要重新从网络上获取

    1.8K40

    Android-文件存储目录

    android持久化方式 Android手机的存储分为:内部存储和外部储存,在Android4.4以前,手机机身存储就叫内部存储,插入的SD就是外部存储,但是在Android4.4以后这两个存储的定义又有了一些些变化...,新的手机不再有外插SD的概念,采取了内置闪存(eMMC、UFS等)的方式,所以内部存储和外部存储在新的Android手机上已经在同一个硬件上了。...手机机身自带的存储也是外部存储,如果再插入SD的话也叫外部存储,不过现在也几乎没有在采用扩展内存这种方式来增加手机存储空间了,手机自带的外部存储足矣,除此以外还有一种公有目录存储,它返回的目录全都是共享的公有目录...对于公有目录上面的文件路径需要通过Environment获取 3.1 getExternalStorageDirectory() //SD外部存储路径 String externalStoragePath...Environment.DIRECTORY_DOWNLOADS可以用于存放app更新的apk等下载资源 4.系统存储目录 4.1getRootDirectory() 对应获取系统分区根路径:/system

    3.6K21

    保存文件到手机内存

    私有目录路径可以通过 Context->getFilesDir() 来获取。 除了私有存储区域以外,SD 上都是公共区域,所有人可读写。...之前 android 不限制目录,所以各种应用就随意的在 SD 上建一个目录。然后 SD 上的目录到处都是,用户对这种现象早就深恶痛绝了!如果 Google 对这件事情下狠手,只能说是大快人心。...另外说一下,SD 上的指定目录是这样获取的: 1,程序相关的 内置存储目录,这个目录位于内置 flash,应用程序可以随意读写: getFilesDir(); 2,程序相关的 SD 外部存储目录,这个目录位于...SD ,应用程序可以随意读写: getExternalFilesDir(null); 3,SD 公共目录,这些目录仍然可以访问,不受权限限制: Environment.getExternalStoragePublicDirectory...如果大家要存储数据,可以用 1 或者 2 的方法,获取正确的目录,然后进行任意读写,这样不会把 SD 目录写乱。

    97440

    Android 10 和Android 11的适配

    一、 私有目录下资源访问 存在这样一个场景:我们要分享一张图片到qq或者微信,首先第一步是要是得到这个bitmap(通过本地生成或者网络加载),然后存储到本地sd上,最后把存储的图片的绝对路径传给qq...在以上的场景中,涉及到了这些关键点: 把图片存储到sd 把绝对路径path传递给qq或者微信 1.1 直接访问sd的根目录 通过FileOutPutStream来完成,在Android10以下都没问题...1.3 分享原理总结 分享的本质就是把图片路径给qq或微信访问,让他们能够访问到我们的图片。分区之前是存储在外部sd,都没有问题。...在Android10 上公共目录下的图片无法通过file:// 格式去访问,提示找不到路径。如glide加载、图片选择库、裁剪框架等等都会收到影响。...完美避开无法访问公共目录的坑!!! 在Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。

    1.3K41

    笔记——安卓存储知识(十)

    storage或mnt文件夹即为外部存储区,外部存储中的文件是可以被用户或者其他应用程序修改的,有两种类型的文件(或者目录): >1.公共文件Public files:文件是可以被自由访问,且文件的数据对其他应用或者用户来说都是有意义的...私有目录就是Android这个文件夹路径下的。...如:/storage/emulated/0/Android/data/com.fivefloor.bo.myview/cache >3.外部TF也是属于外部存储的,而要注意外置TF(外置SD)一般为...从用户角度来说SD有内置SD和外置TF之分,通过Environment或者Context获取的都是手机自带的内置SD路径,类似storage/emulated/0/加后缀。...内部存储和外部存储并不是按是否存储于SD来区分的,内部存储是在data文件下,外部存储是在storage或者mnt文件夹下,这就是区别。

    70530

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

    这些名字来自Android的早期,那时大多数设备提供了内置的非易失性存储器(内存),加上一个可移动的存储介质如micro SD(外部存储)。...micro-SD,这部分也算做外部存储,相当于windows上的外接硬盘吧。...外部存储: 不一定存在,比如有的手机出厂是只有内部存储,没有外部存储,用户自己又没有安装micro-SD,这时外部存储是不可用的; 读写完全开放的,所以你保存的数据可能会被用户和可其它程序读取; 卸载应用时只会删除通过...type)方法获取外部存储的公共目录公共目录有几种类型,根据你输入的type返回不同的文件夹,type类型有: public static String DIRECTORY_ALARMS 标准的铃声目录...,可以通过调用Context.java中的: public abstract File getExternalFilesDir (String type) 方法获取外部存储路径路径是: /mnt/sdcard

    2.1K60

    Unity3D各平台Application.xxxPath的路径

    Caches是一个相对临时的目录,适合存放下载缓存的临时文件,空间不足时可能会被系统清除,Application.temporaryCachePath返回的就是此路径。...目录     shared_prefs 类似于iOS的Preferences目录,用于存放常用设置,比如Unity3D的PlayerPrefs就存放于此 外部存储目录: 在内置或外插的sd上,用户或其它...公有目录是像DCIM、Music、Movies、Download这样系统创建的公共目录,当然你也可以像微信那样直接在sd目录创建一个文件夹。好处嘛,就是卸载app数据依旧存在。...经反复测试发现,有【外置SD】的设备上,如果声明读/写外部存储设备的权限,会返回外部存储路径,不声明则会返回内部存储路径,这样不会有问题。...而在【无外置SD】的设备上,不管是否声明读/写外部存储设备的权限,Application.temporaryCachePath/persistentDataPath都返回外部存储路径,但是又没有权限,

    87010

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

    Caches是一个相对临时的目录,适合存放下载缓存的临时文件,空间不足时可能会被系统清除,Application.temporaryCachePath返回的就是此路径。...目录     shared_prefs 类似于iOS的Preferences目录,用于存放常用设置,比如Unity3D的PlayerPrefs就存放于此 外部存储目录: 在内置或外插的sd上,用户或其它...公有目录是像DCIM、Music、Movies、Download这样系统创建的公共目录,当然你也可以像微信那样直接在sd目录创建一个文件夹。好处嘛,就是卸载app数据依旧存在。...经反复测试发现,有【外置SD】的设备上,如果声明读/写外部存储设备的权限,会返回外部存储路径,不声明则会返回内部存储路径,这样不会有问题。...而在【无外置SD】的设备上,不管是否声明读/写外部存储设备的权限,Application.temporaryCachePath/persistentDataPath都返回外部存储路径,但是又没有权限,

    1.1K20

    Android教程-保存数据-保存文件

    这些名称来自早期的安卓, 那时候大多数设备都提供内建的非易丢失内存 (内部存储), 再加上一个可移除的存储介质,比如微型SD (外部存储)....在内部存储中保存一个文件 ---- 当要在一个内部存储中保存一个文件时,你可以通过调用下面两个方法的其中之一,来获取相应的目录 文件 : getFilesDir()     返回一个表示你应用的内部路径的...在外部存储上保存一个文件 ---- 由于外部存储可能不可用——比如用户已经将其挂载到了一台PC上,或者已经将提供外部存储的SD移除——你应该在访问它之前总是去验证一下其可用性 ....当用户卸载你的应用,系统会删除你的应用程序外部私有路径下的所有文件 .例如,你的应用下载的额外的资源或者临时媒体文件 ....如果你想要在外部存储上保存公共的文件,使用 getExternalStoragePublicDirectory() 方法来获取一个表示外部存储上对应文件的 File .

    2.6K30

    Android适配踩到的坑

    测试这边用了手里的设备都无法复现此问题,开发做了用户回访,发现腾讯地图是可以切换存储位置到外置sd上,所以初步排除了“用户sd不可用”的异常,但是因为用户的机型拿不到,所以测试找了同款机型(红米NOTE...时,是将已下载的离线地图连同目录一起移动到了/xx/A/是腾讯地图存储已下载离线地图文件的目录; 而腾讯路宝则是存储到了/yy/B/是腾讯路宝存储已下载离线地图文件的目录; 对比了这个区别之后,路宝开发将路宝代码中的存储目录也移动了下...,即做切换存储位置到外置sd时,将其保存在/xx/B/目录下,即前半部分路径与腾讯地图相同、后半部分为各自包路径,经测试验证,问题得到解决。...3、与开发人员沟通,开发在试图获取外置sdcard是否有可写权限时,是判断了/storage/extSdCard这个目录,那么我们就顺藤摸瓜,来看下这个目录Android系统下的权限吧,如下: 先连接设备...守护进程会被用来补充文件系统的权限,FUSE守护进程会强制赋予拥有特定目录的App每个权限(也就是访问自身数据存储的目录android/data/pack-agename...及一些公共目录)。

    1.5K80
    领券