为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Android 内部存储中创建文件夹

无法在 Android 内部存储中创建文件夹

饮歌长啸 2024-01-05 10:31:16
我正在尝试在手机的内部存储中创建一个文件夹,但无论我做什么它都不会创建它我尝试过的事情:将手机从电脑上拔下在清单中和以编程方式为 API 23+ 设置权限我可以找到的文件夹的每个变体:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) Environment.getDataDirectory() 等。在每一篇文章或文章的变体中搜索类似问题尝试了 mkdir() 和 mkdirs() 的两种变体检查手机是否存在文件夹该代码还与一个按钮绑定在一起,因此当我第二次按下它时,应该已经授予了权限请求。File sdir = new File (Environment.getExternalStorageDirectory().getpath(), "/DBTEST/");String[] PERMISSIONS_STORAGE = {        Manifest.permission.WRITE_EXTERNAL_STORAGE};ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS_STORAGE, 1);System.out.println("DIRECTORY CREATED: " + sdir.mkdirs());System.out.println("EXISTS: " + sdir.exists());System.out: DIRECTORY CREATED: falseSystem.out: EXISTS: false<manifest xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    package="com.example.testM">    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

尝试改变这一行:

File sdir = new File (Environment.getExternalStorageDirectory().getpath(), "/DBTEST/");

File sdir = new File (Environment.getExternalFilesDir(null) + "/DBTEST/");

根据开发者文档:

getExternalStorageDirectory() - 此方法在 API 级别 29 中已弃用。为了提高用户隐私,不推荐直接访问共享/外部存储设备。当应用程序以 Build.VERSION_CODES.Q 为目标时,应用程序无法再直接访问从此方法返回的路径。应用可以通过迁移到 Context#getExternalFilesDir(String)、MediaStore 或 Intent#ACTION_OPEN_DOCUMENT 等替代方案来继续访问共享/外部存储上存储的内容。

getExternalFilesDir(null)将返回您的应用程序存储文件夹(内部存储)/Android/data/your.app.name/file/

如果您想访问某些操作系统定义的文件夹,您只需传递此处定义的环境常量:

https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String)

和这里

https://developer.android.com/reference/android/os/Environment

在“字段”部分下。

前任。下载将是:getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)


查看完整回答
反对 回复 2024-01-05
?
catspeake

TA贡献1111条经验 获得超0个赞

这是 Android-Q 中引入的隐私限制。当应用程序以 API 29 为目标并且应用程序不再可以直接访问从getExternalStorageDirectory方法返回的路径时,不推荐直接访问共享/外部存储设备。使用应用程序特定的目录来写入和读取文件。

默认情况下,面向 Android 10 及更高版本的应用会获得对外部存储或范围存储的有限访问权限。此类应用程序可以查看外部存储设备中的以下类型的文件,而无需请求任何与存储相关的用户权限:

  • 应用程序特定目录中的文件,使用getExternalFilesDir()访问。

  • 应用程序从媒体商店创建的照片、视频和音频剪辑。


查看完整回答
反对 回复 2024-01-05
  • 2 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信