Android createTempFile lanza permiso denegado?
Esto es simple, pero no funciona. Estoy intentando crear un archivo del temp (más adelante un archivo permanente del almacenaje) para la inspección previo de un archivo MP3. He intentado las siguientes variantes del sufijo como ejemplo siguiente:
public class StudyFileIo extends Activity { private static final String TAG = "StudyFileIo"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { File tempFooFile = File .createTempFile("foo", "dat"); Log.i(TAG, tempFooFile.getAbsolutePath()); } catch (IOException e) { Log.e(TAG, e.toString()); e.printStackTrace(); } } }
Iniciar sesión:
- Adb remount permiso denegado, pero capaz de acceder a superusuario en shell - android
- ADB obtener un permiso denegado a pesar de correr como root
- ¿Cómo inhabilitar a Google para solicitar permiso para revisar regularmente las aplicaciones instaladas en mi teléfono?
- ¿Pueden las aplicaciones de Android solicitar permisos adicionales en tiempo de ejecución?
- No se detecta el dispositivo USB de modo host - ¿Qué archivos son exactamente necesarios?
09-07 11:25:20.299 E/StudyFileIo( 8859): java.io.IOException: Permission denied 09-07 11:25:20.299 W/System.err( 8859): java.io.IOException: Permission denied 09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createNewFileImpl(Native Method) 09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createNewFile(File.java:1160) 09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createTempFile(File.java:1224) 09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createTempFile(File.java:1182) 09-07 11:25:20.299 W/System.err( 8859): at com.mobibob.studyfileio.StudyFileIo.onCreate(StudyFileIo.java:25) 09-07 11:25:20.299 W/System.err( 8859): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-07 11:25:20.299 W/System.err( 8859): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 09-07 11:25:20.309 W/System.err( 8859): at android.os.Handler.dispatchMessage(Handler.java:99) 09-07 11:25:20.309 W/System.err( 8859): at android.os.Looper.loop(Looper.java:123) 09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread.main(ActivityThread.java:4627) 09-07 11:25:20.309 W/System.err( 8859): at java.lang.reflect.Method.invokeNative(Native Method) 09-07 11:25:20.309 W/System.err( 8859): at java.lang.reflect.Method.invoke(Method.java:521) 09-07 11:25:20.319 W/System.err( 8859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 09-07 11:25:20.319 W/System.err( 8859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 09-07 11:25:20.319 W/System.err( 8859): at dalvik.system.NativeStart.main(Native Method)
¿Hay alguna configuración de AndroidManifest.xml que me falta (estoy usando el manifiesto predeterminado)?
- ¿Cómo obtener la configuración del permiso de aplicación en android?
- Cómo configurar los permisos para Android Bluetooth
- Android NDK limitaciones?
- Android openFileOutput - no hay permiso para crear almacenamiento
- INSTALL_FAILED_EAS_POLICY_REJECTED_PERMISSION?
- No se puede obtener android para conectarse a Internet (permiso denegado)
- ¿Es posible eliminar permisos de una aplicación de Android?
- Dar un permiso para la raíz de la aplicación de Android
Es necesario crear los archivos temporales en un directorio que posee su aplicación. Debe utilizar createTempFile(String prefix, String suffix, File directory)
, donde directorio es la ubicación a la que se va a escribir el archivo temporal. Puede obtener una ubicación válida para directorio con el resultado de Context.getFilesDir()
o Context.getDir(String name, int mode)
.
Pienso que usted apenas faltó el permiso para escribir en el almacenaje externo, puesto que los archivos del temp se crean allí por abandono. Añadir
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
A su manifiesto y debe funcionar.