Bueno, esto no es exactamente una pregunta, ya que no estoy realmente "atrapado" en mi código, pero he encontrado un comportamiento extraño para la API de Android con respecto al acceso al almacenamiento externo y el método File.createTempFile(), y Me gustaría entender qué está sucediendo ...¿Cuál es la mejor manera de crear archivos temporales en Android?
Tenga en cuenta que mi manifiesto no incluye el <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
.
Parte 1:
tengo el siguiente código, que hace trabajo como un encanto:
File tempFile = new File(Environment.getExternalStorageDirectory(),
"my_temp_file.png");
crea un archivo temporal para mí, y puedo escribir Datas en él sin ningún problema.
Pregunta 1: ¿Por qué funciona, ya que no se supone que tenga derechos de escritura en mi tarjeta SD?
Parte 2:
He tratado de cambiar el código para utilizar el createTempFile
que es el método oficial para crear el archivo temporal. Así que he intentado:
File tempFile = File.createTempFile("my_temp", "png",
Environment.getExternalStorageDirectory());
, y añadió la WRITE_EXTERNAL_STORAGE en mi manifest.xml. Adivina qué ? Esto no funciona, y me da un 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)
Pregunta 2: ¿Por qué esto no funciona, mientras que en mi humilde opinión lo que debería?
¿Lo has verificado dos veces? –
Sí absolutamente) Ambos casos –
¿Qué api de Android estás usando? Creo que si uno establece la API en el nivel 4, entonces no se aplican ciertos permisos – tomi