Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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:

  • Diseño lib - CoordinatorLayout / CollapsingToolbarLayout con GridView / listView
  • Inicio de sesión de Android - autenticador de cuentas vs autenticación manual
  • Android equivalente de trabajo alrededor de View.getX () antes de la API 11?
  • Barra de herramientas Android demasiado alta en modo horizontal
  • El teclado virtual se superpone a EditTextPreferenceDialogFragmentCompat cuando AppTheme es translúcido
  • NPE mientras infla el diseño (Intentar invocar el método virtual 'boolean java.lang.String.equals (java.lang.Object)' en una referencia de objeto nulo)
  • @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.

  • Diferencia entre dexopt y dex2oat?
  • Error (1,1) ilegalcharacter '\ ufeff' al compilar en android studio
  • Efecto de ondulación para las vistas del lollipop
  • ¿Hay una manera de agregar recordatorios a un nuevo evento de calendario usando Intents?
  • Cómo agregar tinte de botón mediante programación
  • Android sola línea TextView sin los puntos
  • 4 Solutions collect form web for “Android READ_EXTERNAL_STORAGE permiso no funciona”

    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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.