那么这并不完全是一个问题,因为我并没有真正地“停留在我的代码上”,但是我发现一些关于访问外部存储和File.createTempFile()方法的
Android API有一些奇怪的行为,想了解发生了什么…
请注意,我的清单不包括< uses-permission android:name =“android.permission.WRITE_EXTERNAL_STORAGE”>.
第1部分 :
我有以下代码作为一个魅力工作:
File tempFile = new File(Environment.getExternalStorageDirectory(),"my_temp_file.png");
它为我创建一个临时文件,我可以在其中编写数据没有任何麻烦.
问题1:为什么它的工作,因为我不应该在我的SDCard有写权限?
第2部分 :
我已经尝试改变我的代码来使用createTempFile,这是创建临时文件的官方方法.所以我试过:
File tempFile = File.createTempFile("my_temp","png",Environment.getExternalStorageDirectory());
并在我的manifest.xml中添加了WRITE_EXTERNAL_STORAGE.你猜怎么了 ?这不行,我得到一个java.io.IOException:
09-07 14:07:29.061: E/_CLOG(19982): java.io.IOException: Permission denied 09-07 14:07:29.061: E/_CLOG(19982): at java.io.File.createNewFileImpl(Native Method) 09-07 14:07:29.061: E/_CLOG(19982): at java.io.File.createNewFile(File.java:1257) 09-07 14:07:29.061: E/_CLOG(19982): at java.io.File.createTempFile(File.java:1322) 09-07 14:07:29.061: E/_CLOG(19982): at com.(...).onClick(ProfileImageUpdater.java:58)
问题2:为什么这不行,而imho应该?
解决方法
尝试这样…
File outputDir = context.getCacheDir(); // context being the Activity pointer File outputFile = File.createTempFile("prefix","extension",outputDir);
编辑:
对于问题2
可能是以下链接的问题
Environment.getExternalStorageDirectory does not return the path to the removable storage