Qual é a melhor maneira de criar arquivos temporários no Android?

Bem, isso não é exatamente uma pergunta, já que eu não estou realmente "preso" no meu código, mas eu encontrei um comportamento estranho para a API do Android sobre o acesso ao armazenamento externo e o método File.createTempFile (), e eu Eu gostaria de entender o que está acontecendo ...

Por favor note que o meu manifestonão incluir o<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">.

Parte 1 :

Eu tenho o seguinte código quefaz trabalhe como um encanto:

File tempFile = new File(Environment.getExternalStorageDirectory(),
                      "my_temp_file.png");

ele cria um arquivo temporário para mim e eu posso escrever dados nele sem nenhum problema.

Questão 1 : Por que funciona, já que eu não deveria ter direitos de escrita no meu SDCard?

Parte 2 :

Eu tentei mudar meu código para usar ocreateTempFile qual é o método oficial para criar arquivo temporário. Então eu tentei:

File tempFile = File.createTempFile("my_temp", "png", 
                      Environment.getExternalStorageDirectory());

e adicionou oWRITE_EXTERNAL_STORAGE no meu manifest.xml. Adivinha ? Isso não funciona, e eu recebo umjava.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)

Questão 2 : Por que isso não funciona, enquanto isso deveria ser?

questionAnswers(3)

yourAnswerToTheQuestion