我正在学习安卓开发,但在 Java 中读取 getExternalStorageDirectory 遇到了一些问题,我已经阅读过 https://developer.android.com/reference/android/os/Environment 但是无法理解,有人能给我提供一个 Java 示例代码吗?
我正在学习安卓开发,但在 Java 中读取 getExternalStorageDirectory 遇到了一些问题,我已经阅读过 https://developer.android.com/reference/android/os/Environment 但是无法理解,有人能给我提供一个 Java 示例代码吗?
从文档中可以看到:
getExternalStoragePublicDirectory(String type)
该方法在API级别29中已被弃用。为了提高用户隐私,不再直接访问共享/外部存储设备。当应用程序针对Build.VERSION_CODES.Q时,从此方法返回的路径不再直接可供应用程序访问。应用程序可以继续通过迁移到替代方案,例如Context#getExternalFilesDir(String)、MediaStore或Intent#ACTION_OPEN_DOCUMENT来访问存储在共享/外部存储上的内容。
不传递参数即可将您的目录作为File
对象获取:
context.getExternalFilesDir();
这里的"Context"是通过this.getContext();
获取的对象。
this
是Activity的当前对象。在使用时请仔细检查范围。
重要提示
要访问内部存储,文件AndroidManifest.xml中需要Manifest.permission.WRITE_EXTERNAL_STORAGE
和/或Manifest.permission.READ_EXTERNAL_STORAGE
权限。
可选信息:
更新
从Android 11开始,不允许在根目录下创建文件夹/文件,但我们仍然可以通过公共目录来管理文件夹分离(它会显示一个过时的警告,但它仍然有效)
fun getAbsolutePath(context: Context): File {
return File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "{YOUR_FOLDER_NAME}"))
}
现在,创建具有常见目录路径的文件。
val file = File(getAbsolutePath(requireContext()), "FILENAME.EXTENSION")
旧版
使用这个静态方法。 目前我没有找到任何合法的方法来做到这一点。 因此,我编写了这个静态方法来获取根目录或绝对路径文件路径。
public static File getAbsoluteDir(Context ctx, String optionalPath) {
String rootPath;
if (optionalPath != null && !optionalPath.equals("")) {
rootPath = ctx.getExternalFilesDir(optionalPath).getAbsolutePath();
} else {
rootPath = ctx.getExternalFilesDir(null).getAbsolutePath();
}
// extraPortion is extra part of file path
String extraPortion = "Android/data/" + BuildConfig.APPLICATION_ID
+ File.separator + "files" + File.separator;
// Remove extraPortion
rootPath = rootPath.replace(extraPortion, "");
return new File(rootPath);
}
getExternalStoragePublicDirectory()
回答了其他100个线程中的问题,即“如何访问公共DCIM目录(例如)以保存文件”。其余答案是为了获取应用程序的内部目录(例如DCIM),这些目录无法通过图库查看。 - IOviSpotContext
中的getExternalFilesDir()
、getExternalCacheDir()
或getExternalMediaDirs()
方法,而不是Environment.getExternalStorageDirectory()
。请注意保留HTML标签。String root = mContext.getExternalFilesDir(null).getAbsolutePath();
File myDir = new File(root + "/" + mContext.getResources().getString(R.string.app_name) + "_share");
myDir.mkdirs();
Environment.getExternalStorageDirectory
和Environment.getExternalStoragePublicDirectory
已经取消弃用(undeprecated)。
Environment.getExternalStorageDirectory()
相同的位置。 - mike47