Android READ_EXTERNAL_STORAGE permiso no funciona
Estoy tratando de crear una aplicación sencilla que puede obtener una imagen de la aplicación Galería y mostrarla en un imageButton. Estoy probando con API 21 en un teléfono con Android 5.0.1. Desafortunadamente, no importa lo que intento, sigo recibiendo un error de seguridad, incluso cuando especifico los permisos.
Mi código para obtener la recuperación de la imagen es:
- Java Jackson org.codehaus.jackson.map.exc.UnrecognizedPropertyException
- "No se puede resolver el símbolo` Request` 'error para facebook Graph API
- Google Analytics para Android: establece información sobre dispositivo móvil
- Agregue un botón dinámicamente a un LinearLayout en Android
- Error al convertir de Java a Kotlin. Error - org.gradle.api.tasks.TaskExecutionException: Error de ejecución para la tarea ': app: compileDebugKotlin'
@Override protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){ super.onActivityResult(requestCode, resultCode, imageReturnedIntent); switch(requestCode){ case PICK_IMAGE_REQUEST: if(resultCode == RESULT_OK && imageReturnedIntent != null && imageReturnedIntent.getData() != null) { Uri uri = imageReturnedIntent.getData(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); // Log.d(TAG, String.valueOf(bitmap)); ImageButton ib = (ImageButton) findViewById(R.id.inputImg); ib.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } } break; } }
El código funciona cuando intento seleccionar una imagen de Dropbox, pero cuando selecciono una imagen de la galería, obtengo
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/35634 from pid=25240, uid=10070 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
Hice la etiqueta del uso-permiso para READ_EXTERNAL_STORAGE un niño del manifest:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="[REDACTED]"> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" /> <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <application> [REDACTED] </application> </manifest>
He buscado alto y bajo en otros puestos, pero todavía no puedo entender por qué sigo recibiendo este molestia error.
- Significado de android.content.UriMatcher
- ¿Cómo obtener la URL redireccionada de OkHttp3?
- ¿Puede un futuro programado causar una pérdida de memoria?
- WebView clearHistory () en la funcionalidad de Webview canGoback ()?
- ¿Por qué los nombres de las variables a menudo comienzan con la letra "m"?
- Cómo implementar la comunicación Actividad-Servicio
- El estado de la batería no se está cargando
- Intención no recibida del evento Android Geofence
PROBLEMA
Tienes el error
Java.lang.SecurityException: Permiso Negación: lectura com.android.providers.media.MediaProvider uri contenido: // media / external / images / media / 35634 de pid = 25240, uid = 10070 r evalúa android.permission.READ_EXTERNAL_STORAGE o GrantUriPermission ().
PORQUE
No estás dando correctamente permisos debido a android:maxSdkVersion="18"
, que según la documentación.
El nivel de API más alto en el que se debe conceder este permiso a tu aplicación. Establecer este atributo es útil si el permiso que requiere su aplicación ya no es necesario a partir de cierto nivel de API.
Siempre y cuando no hayas dado permisos a la API 21
tu aplicación se está comportando bien.
Consulte este tema para obtener más información.
SOLUCIÓN
Si desea otorgar permisos de lectura bajo la API 21
, debe declararlos como:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="21" />
IMPORTANTE:
Esto sólo tiene sentido cuando se necesita dar permisos adicionales porque algunas api antiguas requieren permisos que no son nuevas versiones, por lo que la experiencia del usuario mejora, ya que solo solicita ciertos permisos cuando sea necesario.
Así (en este caso) la forma correcta será:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
AÑADIR
Si desea guardar datos, debe agregar permisos WRITE_EXTERNAL_STORAGE
.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Simplemente reemplazar con el siguiente y tratar,
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Mientras depura en algunos dispositivos, necesitas conceder permiso explícitamente accediendo a tu configuración -> aplicaciones -> MY_APPLICATION -> Permisos y luego conceder permisos requeridos.
Además de agregar lo siguiente en AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
También necesitamos solicitar permiso en la actividad para que la aplicación tenga acceso al almacenamiento externo. https://developer.android.com/training/permissions/requesting.html
- Android Studio 0.5.2 Gradle Refresh Project falló
- ¿Cómo puedo agregar una sombra a la vista inferior de la hoja?