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?Ma solution utilisant le File Provider
private void viewGallery(File file) {
Uri mImageCaptureUri = FileProvider.getUriForFile(
mContext,
mContext.getApplicationContext()
.getPackageName() + ".provider", file);
Intent view = new Intent();
view.setAction(Intent.ACTION_VIEW);
view.setData(mImageCaptureUri);
List < ResolveInfo > resInfoList =
mContext.getPackageManager()
.queryIntentActivities(view, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo: resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
mContext.grantUriPermission(packageName, mImageCaptureUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
view.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(mImageCaptureUri, "image/*");
mContext.startActivity(intent);
}
Il existe un bel exemple sur ce site web : Android-using-intents-open-files
J'espère que cela vous aidera :)
Presque NON Vous n'avez aucune chance d'utiliser une application de photo ou de galerie (il en existe peut-être une), mais vous pouvez essayer le visualisateur de contenu.
Veuillez consulter une autre réponse à une question similaire aquí
L'uri doit être l'uri du contenu et non l'uri du fichier, Vous pouvez obtenir contentUri par FileProvider de la manière suivante
Uri contentUri = FileProvider.getUriForFile(getContext(),"com.github.myApp",curFile);
N'oubliez pas d'ajouter le fournisseur dans le fichier Manifest.
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.github.myApp"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>