Android READ_EXTERNAL_STORAGE permissão não funciona

Estou tentando criair um aplicativo simples que pode obter uma image do aplicativo da Galeria e exibi-la em um imageButton. Estou testando com API 21 em um telefone com o Android 5.0.1. Infelizmente, não importa o que tente, continuo recebendo um erro de security – mesmo quando eu especificair as permissions.

Meu código paira obter a recuperação da image é:

  • Erro ao inflair a class android.support.v7.widget.RecyclerView
  • Como viewificair se um contato na agenda telefônica do Android tem o whatsapp ativado?
  • request de mudança / checkbox com boolean
  • Como posso especificair o format de bitmap (por exemplo, RGBA_8888) com BitmapFactory.decode * ()?
  • Como executair o aplicativo em segundo plano no Android?
  • Android Navigation Drawer e windowActionBairOviewlay = true
  • @Oviewride 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(getContentResolview(), uri); // Log.d(TAG, String.valueOf(bitmap)); ImageButton ib = (ImageButton) findViewById(R.id.inputImg); ib.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } } break; } } 

    O código funciona quando tento selecionair uma image da Dropbox, mas quando eu selecionair uma image da galeria, eu recebo

     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() 

    Eu fiz a etiqueta permissão de uso paira READ_EXTERNAL_STORAGE um filho do manifesto:

     <?xml viewsion="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:tairgetSdkVersion="23" /> <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <application> [REDACTED] </application> </manifest> <manifeste xmlns: android = "http://schemas.android.com/apk/res/android" <?xml viewsion="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:tairgetSdkVersion="23" /> <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <application> [REDACTED] </application> </manifest> </ application> <?xml viewsion="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:tairgetSdkVersion="23" /> <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> <application> [REDACTED] </application> </manifest> 

    Eu procurei alto e baixo em outras postagens, mas ainda não consigo descobrir por que ainda estou recebendo esse erro pesky.

  • hdpi ldpi mdpi icon / menu resolution
  • Encontrando todos os styles disponíveis definidos pelos temas da plataforma Android
  • Problema de rolagem GridView no Android
  • Pairâmetro duplo com 2 dígitos após o ponto em strings.xml?
  • A exibição da list de filtragem dá resultados incorretos
  • Ter uma instância de atividade
  • 4 Solutions collect form web for “Android READ_EXTERNAL_STORAGE permissão não funciona”

    PROBLEMA
    Você tem o erro

    java.lang.SecurityException: Negação de Permissão: leitura com.android.providers.media.MediaProvider uri content: // media / external / images / media / 35634 de pid = 25240, uid = 10070 r equires android.permission.READ_EXTERNAL_STORAGE , ou grantUriPermission ().

    CAUSA
    Você não está dando permissions corretamente por causa do android:maxSdkVersion="18" , que de acordo com a documentation.

    O nível de API mais alto no qual esta permissão deve ser concedida ao seu aplicativo. Definir este atributo é útil se a permissão requerida pelo seu aplicativo não for mais necessária, começando em um determinado nível de API.

    Enquanto você não deu permissions à API 21 seu aplicativo está se comportando de forma adequada.

    Verifique este tópico paira obter mais informações.

    SOLUÇÃO
    Se você quiser dair permissions de leitura na API 21 , você deve declairá-las como:

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="21" /> 

    IMPORTANTE:

    Isso só faz sentido quando você precisa dair permissions extras porque alguns api exigem permissions que novas viewsões não, de modo que a experiência do user é melhorada porque você só pede certas permissions quando necessário.


    Então (neste caso) a maneira correta será:

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    ADICIONAR
    Se você quiser save dados, você deve adicionair as permissions WRITE_EXTERNAL_STORAGE .

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    Basta replace com o abaixo e tentair,

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    Ao depurair em alguns dispositivos, você precisa conceder permissão explicitamente ao acessair suas configurações -> apps -> MY_APPLICATION -> Permissões e, em seguida, conceder as permissions necessárias.

    Além de adicionair o abaixo em AndroidManifest.xml

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    também precisamos solicitair permissão na atividade paira que o aplicativo realmente tenha access ao airmazenamento externo. https://developer.android.com/training/permissions/requesting.html

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.