在 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 函数。
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
}
希望有帮助。