从 getExternalCacheDir() 获取的/storage/emulated/0 生成“没有这样的文件或目录”错误

问题描述 投票:0回答:1

在 Nexus 4 上运行,当我调用

getExternalCacheDir().getAbsolutePath()
时,我得到一条路径
/storage/emulated/0/Android/Data/com.example.myapp/cache
。问题是,正如不同地方所述,
/storage/emulated/0
生成“没有这样的文件或目录”错误。

我期望得到的是类似

/storage/emulated/legacy
的东西,因为我正确地使用
EXTERNAL_STORAGE
等命令查询
System.getenv("EXTERNAL_STORAGE")
环境变量。

我只会使用 if 语句来检查和更正路径,以防它指向与我使用

getenv
得到的不同的东西,但我想了解为什么
getExternalCacheDir()
返回无效路径,或者该函数是否有不知何故已被弃用。

补充说明: 在 Xperia U 上运行 CM11 运行良好; 瞄准 Nexus 4

adb
我明白了

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 函数。

android storage android-sdcard
1个回答
0
投票

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
}

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.