在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工作正常;
使用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函数。
答案 0 :(得分: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
}
希望有所帮助。