在 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/