Abrir imagen en la galería con Android Nougat

Quiero abrir una imagen guardada en la galería en Android Nougat, pero lo que tengo es una página de la galería con el mensaje negro "No se puede cargar la foto".

Ese es mi código:

Manifiesto

<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> 

Provider_paths.xml

 <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="."/> </paths> 

Ruta generada en DrawView

 public static boolean save(Bitmap bitmap){ Date now = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy'_'HH:mm"); File folder = new File(Environment.getExternalStorageDirectory() + File.separator + "Crash"); if (!folder.exists()) { folder.mkdirs(); } FileOutputStream fos = null; try { lastImagePath = new File(Environment.getExternalStorageDirectory().toString() + "/Crash/" + simpleDateFormat.format(now) + ".jpg"); fos = new FileOutputStream(lastImagePath); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); fos = null; return true; } catch (IOException e) { e.printStackTrace(); return false; } finally { if (fos != null) { try { fos.close(); } catch (IOException e) {} } } } 

Abrir el buscador de imágenes

  private class OpenImageListener implements View.OnClickListener{ @Override public void onClick(View v) { if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file://" + DrawView.getLastImagePath().getAbsolutePath()), "image/*"); startActivity(intent); } else { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri photoUri = FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID + ".provider", DrawView.getLastImagePath()); intent.setData(photoUri); startActivity(intent); } } } 

Tal vez generar un camino equivocado para la imagen, pero con la versión antigua funciona (he probado en Marshmallow y funciona muy bien).

¿Alguien me puede ayudar? Gracias.

En el bloque else en onClick() , después de llamar a setData() en su Intent para configurar el Uri , llame a addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) en el Intent .

En su estado actual, la otra aplicación no tiene derecho a trabajar con el contenido identificado por el Uri . La adición de FLAG_GRANT_READ_URI_PERMISSION hace esto.

Esto está cubierto en la documentación de FileProvider , junto con los libros modernos sobre el desarrollo de aplicaciones para Android.

Hago expirar el mismo problema con casi todas las aplicaciones que he probado, mi código es el mismo que el suyo y en cuanto a los documentos de google dicen que parece ser correcto …

La única "solución" que puedo ofrecer es compilar contra la versión 23 ( https://source.android.com/source/build-numbers.html ) para evitar el modo estricto forzado para los URIs de archivos. Por supuesto, también tienes que rebajar tus libs de soporte de Android en caso de que las estés usando.

Si alguien tiene una idea mejor por favor comparta …

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