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

Android 9无法在Android外部公共路径内创建目录(“storage/emulated/0/MyImages”)

Android 9无法在Android外部公共路径内创建目录("storage/emulated/0/MyImages")的原因是由于Android 9引入了更严格的文件系统权限控制机制。为了增强用户数据的安全性,Android 9限制了应用程序对外部存储的访问权限。

在Android 9及更高版本中,应用程序默认只能访问其私有目录,而无法直接在外部公共路径中创建目录。这意味着无法直接在"storage/emulated/0/MyImages"路径下创建目录。

然而,Android提供了一种新的机制来允许应用程序在外部存储中进行文件操作,即通过使用Storage Access Framework(存储访问框架)。通过这种机制,用户可以选择授权应用程序访问外部存储,并且应用程序可以在用户选择的目录中创建文件或目录。

要在Android 9中在外部公共路径内创建目录,可以按照以下步骤进行操作:

  1. 使用Intent调用存储访问框架:
代码语言:txt
复制
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE);
  1. 在onActivityResult方法中处理返回的URI:
代码语言:txt
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        Uri treeUri = data.getData();
        DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
        createDirectory(pickedDir, "MyImages");
    }
}
  1. 创建目录:
代码语言:txt
复制
private void createDirectory(DocumentFile parentDir, String dirName) {
    DocumentFile newDir = parentDir.createDirectory(dirName);
    if (newDir != null) {
        // 目录创建成功
    } else {
        // 目录创建失败
    }
}

通过以上步骤,用户将被要求选择一个目录来授权应用程序访问外部存储,并且应用程序将在用户选择的目录中创建名为"MyImages"的目录。

需要注意的是,由于Android设备的不同,存储访问框架的使用可能会有所差异。此外,由于本回答要求不能提及云计算品牌商,因此无法提供腾讯云相关产品的链接。但是,腾讯云提供了丰富的云计算服务,可以在其官方网站上查找相关产品和文档。

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

相关·内容

Android 获取系统各个目录的方法

Android开发过程中,我们经常会对文件系统进行操作——存放、释放我们应用的数据。Android系统中提供了各种功能的文件目录,每个目录都有相应的特点和功能。...,该目录的文件设备内存不足时会优先被删除掉,所以存放在这里的文件是没有任何保障的,可能会随时丢掉。...外部存储中的文件是可以被用户或者其他应用程序修改的,外部存储中的目录实际上也分为两种: -公共文件(目录) 文件是可以被自由访问,且文件的数据对其他应用或者用户来说都是由 意义的,当应用被卸载之后,其卸载前创建的文件仍然保留...Environment.getExternalStorageDirectory() SD卡的根目录路径:/storage/emulated/0 Log.e(TAG, Environment.getExternalStorageDirectory...getApplicationContext().getExternalFilesDir(“”) 路径:/storage/emulated/0/Android/data/应用包名/files Log.e

6.1K10

Android外部存储

我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdcard、/mnt/sdacrd、/storage/extSdCard、/mnt/shell/emulated/0、/storage...EMULATED_STORAGE_SOURCE环境变量,记录绑定挂载的源路径,注意应用是没有权限进入这个目录的。...EMULATED_STORAGE_TARGET记录绑定挂载的目标路径,应用获取的外部存储路径就在这个目录下。 [13.png] ● 准备挂载路径并进行绑定挂载。...这里看mountMode为MOUNT_EXTERNAL_MULTIUSER时的执行分支,/mnt/shell/emulated/0将被绑定到/storage/emulated/0。...注意这里是新的挂载命名空间,所以只有该应用看得到/storage/emulated/0下的绑定挂载,从adb shell下是看到的只能是个空目录

2.2K60

Unity3D各平台Application.xxxPath的路径

前几天我们游戏一个同事的Android手机上启动时无法正常进入,经查发现Application.temporaryCachePath和Application.persistentDataPath返回空字符串.../assets Application.temporaryCachePath /storage/emulated/0/Android/data/package name/cache Application.persistentDataPath...   /storage/emulated/0/Android/data/package name/files 看Android上的路径,跟iOS有点类似,简单说一下。...公有目录是像DCIM、Music、Movies、Download这样系统创建公共目录,当然你也可以像微信那样直接在sd卡根目录创建一个文件夹。好处嘛,就是卸载app数据依旧存在。...私有目录在/storage/emulated/n/Android/data/package name/,打开可以看到里面有两个文件夹cache和files。为什么跟内部存储目录重复了?

83410

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

前几天我们游戏一个同事的Android手机上启动时无法正常进入,经查发现Application.temporaryCachePath和Application.persistentDataPath返回空字符串.../assets Application.temporaryCachePath /storage/emulated/0/Android/data/package name/cache Application.persistentDataPath...   /storage/emulated/0/Android/data/package name/files 看Android上的路径,跟iOS有点类似,简单说一下。...公有目录是像DCIM、Music、Movies、Download这样系统创建公共目录,当然你也可以像微信那样直接在sd卡根目录创建一个文件夹。好处嘛,就是卸载app数据依旧存在。...私有目录在/storage/emulated/n/Android/data/package name/,打开可以看到里面有两个文件夹cache和files。为什么跟内部存储目录重复了?

1K20

一篇文章彻底明白Android文件存储

] 外部存储 示意图 私有目录(private):storage/emulated/0/Android/ 每个应用独占以包名命名的私有文件夹 应用卸载时被删除 对MediaScanner不可见(例外:...多媒体文件夹 API 21) 特点 适用场景:非私密数据,需要随应用卸载删除 公共目录(public):外部存储中除了私有目录外的其他空间 所有应用共享 应用卸载时不会被删除 对MediaScanner...] 外部存储 API 因为外部存储不一定可用,所以返回值可为空或空数组 公共目录storage/emulated/0/ 描述 Environment.getExternalStorageDirectory...外部存储状态 私有目录storage/emulated/0/Android/data// 描述 Context.getExternalCacheDir():File?...补充 4.1 缓存文件 内部存储和外部存储中都有一个缓存文件夹: data/data//cache/ storage/emulated/0/Android/data//cache/ 当设备存储空间不足时

4.6K00

Android外部存储

我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdcard、/mnt/sdacrd、/storage/extSdCard、/mnt/shell/emulated/0、/storage...EMULATED_STORAGE_SOURCE环境变量,记录绑定挂载的源路径,注意应用是没有权限进入这个目录的。...EMULATED_STORAGE_TARGET记录绑定挂载的目标路径,应用获取的外部存储路径就在这个目录下。 ? ● 准备挂载路径并进行绑定挂载。...这里看mountMode为MOUNT_EXTERNAL_MULTIUSER时的执行分支,/mnt/shell/emulated/0将被绑定到/storage/emulated/0。...注意这里是新的挂载命名空间,所以只有该应用看得到/storage/emulated/0下的绑定挂载,从adb shell下是看到的只能是个空目录。 ?

81130

Android 10 和Android 11的适配

路径如下: /storage/emulated/0/demo/sharePicture/1637048769163_share.jpg 但是Android10及以上,就会存在会报错: java.io.FileNotFoundException...: /storage/emulated/0/demo/sharePicture/1637048769163_share.jpg: open failed: EACCES (Permission denied.../storage/emulated/0/Android/data/com.demo.test/files 当你再通过FileOutPutStream来存储图片时候,是成功的。...Android10 上公共目录下的图片无法通过file:// 格式去访问,提示找不到路径。如glide加载、图片选择库、裁剪框架等等都会收到影响。...完美避开无法访问公共目录的坑!!! Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。

1.3K41

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

storage或mnt文件夹即为外部存储区,外部存储中的文件是可以被用户或者其他应用程序修改的,有两种类型的文件(或者目录): >1.公共文件Public files:文件是可以被自由访问,且文件的数据对其他应用或者用户来说都是有意义的...如:/storage/emulated/0/Pictures >2.私有文件Private 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/加后缀。

1.2K31

App磁盘沙盒工具实践

程序卸载后,该目录也会被删除。 机身外部存储 放到/storage/emulated/0/目录下的文件,有共享目录,还有App外部私有目录,还有其他目录。.../emulated/0/ 下面这个是用adb查看 /storage/emulated/0 路径资源a51x:/storage $ ls emulated self a51x:/storage $ cd...denied 1|a51x:/storage/emulated $ cd 0 a51x:/storage/emulated/0 $ ls //省略 /storage/emulated/0 下的文件 然后来看下...如:/sdcard/Android/data/com.yc.helper 第三种:其它目录 比如各个App/sdcard/目录创建目录,如支付宝创建目录:alipay/,高德创建目录:amap...分区存储原理: 1、App访问自身内部存储空间、访问外部存储空间-App私有目录不需要任何权限(这个与Android 10.0之前一致) 2、外部存储空间-共享存储空间、外部存储空间-其它目录 App无法通过路径直接访问

1.7K30

【权限问题专项】存储权限合理使用场景VS不合理使用场景说明

内部存储路径为:/data/data/packagename(包名),外部存储的私有目录路径为:/storage/emulated/0/Android/data/packagename(包名)。... Android 4.4(API 级别19)或更高版本中,应用无需请求任何与存储空间相关的权限即可访问外部存储空间中的应用私有目录。卸载应用后,系统会移除这些目录中存储的文件。...而外部存储公有目录存储则需要申请 android.permission.WRITE_EXTERNAL_STORAGE(写入外部存储) 与android.permission.READ_EXTERNAL_STORAGE....DIRECTORY_RINGTONES:铃声类型 8.DIRECTORY_ALARMS:闹钟提示音类型 9.DIRECTORY_NOTIFICATIONS:通知提示音类型 对于内部存储路径外部存储路径的全部内容.../emulated/0/Android/data/packagename(包名),无需申请READ_EXTERNAL_STORAGE权限和WRITE_EXTERNAL_STORAGE权限; 5.安卓10

94720

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

这里需要注意:适配AndroidQ的时候还要兼容Q系统版本以下的,使用SDK_VERSION区分 背景 存储权限 Android Q仍然使用READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE...作为存储相关运行时权限,但现在即使获取了这些权限,访问外部存储也受到了限制,只能访问自身目录下的文件和公共内体文件。...外部存储结构划分 公有目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等 地址:/storage/emulated/0/Downloads...APP私有目录 地址:/storage/emulated/0/Android/data/包名/files 私有目录存放app的私有文件,会随着App的卸载而删除。...结合上面代码,我们主要是公共目录创建文件或文件夹拿到本地路径uri,不同的Uri,可以保存到不同的公共目录中。

1.5K40

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

storage或mnt文件夹即为外部存储区,外部存储中的文件是可以被用户或者其他应用程序修改的,有两种类型的文件(或者目录): >1.公共文件Public files:文件是可以被自由访问,且文件的数据对其他应用或者用户来说都是有意义的...如:/storage/emulated/0/Pictures >2.私有文件Private 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/加后缀。

69030
领券