嗯,这不是一个问题,因为我的代码并没有出现“卡住”的情况,但我发现了一些有关访问外部存储和File.createTempFile()方法的Android API奇怪的行为,并且我想理解正在发生的事情...
请注意,我的清单没有包括<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
。
第一部分:
我有以下代码,完美地工作:
File tempFile = new File(Environment.getExternalStorageDirectory(),
"my_temp_file.png");
它为我创建了一个临时文件,我可以在其中写入数据而不会遇到任何麻烦。
问题1:为什么它能工作,因为我不应该拥有SD卡上的写入权限?
第二部分:
我尝试更改我的代码以使用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:为什么这个不起作用,而我认为它应该起作用?