J'ai extrait l'uri de l'image, maintenant je voudrais ouvrir l'image avec le visualisateur d'image par défaut d'Android. Ou mieux encore, l'utilisateur pourrait choisir le programme à utiliser pour ouvrir l'image. Quelque chose comme les explorateurs de fichiers vous proposent si vous essayez d'ouvrir un fichier.
Réponses
Trop de publicités?Si votre application cible Android N (7.0) et plus, vous ne devez pas utiliser les réponses ci-dessus (de la méthode "Uri.fromFile"), car cela ne fonctionnera pas pour vous.
Au lieu de cela, vous devez utiliser un ContentProvider.
Par exemple, si votre fichier image est dans un dossier externe, vous pouvez utiliser ceci (similaire au code que j'ai fait aquí ) :
File file = ...;
final Intent intent = new Intent(Intent.ACTION_VIEW)//
.setDataAndType(VERSION.SDK_INT >= VERSION_CODES.N ?
FileProvider.getUriForFile(this,getPackageName() + ".provider", file) : Uri.fromFile(file),
"image/*").addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
manifeste :
<provider
android:name="androidx.core.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>
res/xml/provider_paths.xml :
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!--<external-path name="external_files" path="."/>-->
<external-path
name="files_root"
path="Android/data/${applicationId}"/>
<external-path
name="external_storage_root"
path="."/>
</paths>
Si votre image est dans le chemin privé de l'application, vous devez créer votre propre ContentProvider, comme j'ai créé "OpenFileProvider" sur le lien.
Essayez de l'utiliser :
Uri uri = Uri.fromFile(entry);
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
String mime = "*/*";
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
if (mimeTypeMap.hasExtension(
mimeTypeMap.getFileExtensionFromUrl(uri.toString())))
mime = mimeTypeMap.getMimeTypeFromExtension(
mimeTypeMap.getFileExtensionFromUrl(uri.toString()));
intent.setDataAndType(uri,mime);
startActivity(intent);
Sur la base de Réponse de Vikas mais avec une légère modification : L'Uri est reçu par paramètre :
private void showPhoto(Uri photoUri){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(photoUri, "image/*");
startActivity(intent);
}
- Réponses précédentes
- Plus de réponses