android - 从 getExternalCacheDir() 获取的/storage/emulated/0 生成 "no such file or directory"错误

标签 android storage android-sdcard

在 Nexus 4 上运行,当我调用 getExternalCacheDir().getAbsolutePath() 时,我得到一个路径 /storage/emulated/0/Android/Data/com.example.myapp/缓存。问题是,如不同地方所述,/storage/emulated/0 生成“没有这样的文件或目录”错误。

我希望得到的是 /storage/emulated/legacy,因为我使用 System.getenv( “EXTERNAL_STORAGE”)

我将只使用 if 语句来检查和更正路径,以防它指向与我通过 getenv 获得的不同的东西,但我想了解为什么 getExternalCacheDir() 返回无效路径,或者该函数已被弃用。

补充说明: 在 Xperia U 上运行 CM11 工作正常; 使用 adb 定位 Nexus 4 我得到

ls /storage/emulated/0
/storage/emulated/0: No such file or directory

我有适当的访问权限,因为如果我打电话,例如,echo "hi!">>/storage/emulated/legacy/Android/Data/com.example.myapp/cache 我没有任何线索,同时调用 echo "hi!">>/storage/emulated/0/Android/Data/com.example.myapp/cache 导致错误。后者是我从 getExternalCacheDir 得到的。


我有兴趣将该路径与 shell 命令一起使用,而不仅仅是与 Android API 函数一起使用。

最佳答案

getExternalCacheDir给你一个有效的路径。
如果您的外部存储已正确安装并且您具有适当的访问权限,您可以对其进行读/写。

即:

if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) // mounted
    && context.checkCallingOrSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) { // have permissions

    File myTempDir = new File(getExternalCacheDir(), "tempDir");
    myTempDir.mkdirs();

    // create and write to files
}

希望对您有所帮助。

关于android - 从 getExternalCacheDir() 获取的/storage/emulated/0 生成 "no such file or directory"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26597245/

相关文章:

Android mkdirs() 在 Android 11 上使用 Environment.getExternalStorageDirectory() 返回 false

android - 有多少用户可以通过一个 MongoDB C++ 驱动程序连接?

android - List<NameValuePair> 或 ArrayList<NameValuePair> 有什么用

java - openAssetFileDescriptor 不会截断 OneDrive 文件

javascript - 将 JavaScript 存储在数据库中供以后使用

android - 如果Android目录尚不存在,如何自动创建它

android - 确定 SDCard 是否存在的确定方法

android - 在 ListView Android 中隐藏和显示 View

java - Android/Java "Convert"字符串到按钮

android - 从 Android Studio 中的 Firebase 存储中检索视频缩略图图像