2 votes

Enregistrer l'image dans un répertoire temporaire et l'ouvrir

J'aimerais enregistrer un bitmap dans un répertoire temporaire et l'ouvrir dans l'application de visualisation d'images par défaut.

J'essaie donc :

   File outputDir = this.getCacheDir(); // context being the Activity pointer
    File outputFile = File.createTempFile(name, ".png", outputDir);
    OutputStream fos2;
    fos2 = new FileOutputStream(outputFile);
    saved = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos2);

    if(saved) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            Uri imageUri = Uri.fromFile(outputFile);
            intent.setDataAndType(Uri.parse("file://" + imageUri), "image/*");
            startActivity(intent);
    }

Le problème est que l'image n'est pas ouverte, peut-être y a-t-il un problème avec le chemin imageUri ?

Gracias.

1voto

CommonsWare Points 402670

Premièrement, Uri.fromFile() a été interdite, en fait, depuis Android 7.0. Normalement, votre tentative de l'utiliser avec un Intent s'écraserait avec un FileUriExposedException . Apparemment, vous avez décidé d'essayer de contourner le contrôle. Cependant, il n'en reste pas moins que vous avez décidé d'essayer de contourner le contrôle, personne d'autre n'est tenu d'honorer votre file:/// Uri Le fait de ne pas avoir d'enfant, parce que, encore une fois, cela a été interdit pendant des années, est une bonne chose. Veuillez passer à FileProvider .

Deuxièmement, vous utilisez "image/*" comme type MIME sortant. Il s'agit d'un votre contenu, il est donc votre pour indiquer au destinataire de quel format de fichier il s'agit. Et puisque vous savez qu'il s'agit d'un PNG, utilisez image/png , pas image/* .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X