Wenn Ihre App auf Android N (7.0) und höher ausgerichtet ist, sollten Sie die obigen Antworten (der Methode "Uri.fromFile") nicht verwenden, da dies für Sie nicht funktioniert.
Verwenden Sie stattdessen einen ContentProvider.
Wenn sich Ihre Bilddatei beispielsweise in einem externen Ordner befindet, können Sie dies verwenden (ähnlich dem Code, den ich hier erstellt habe ):
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);
Manifest:
<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="files_root"
path="Android/data/${applicationId}"/>
<external-path
name="external_storage_root"
path="."/>
</paths>
Wenn sich Ihr Bild im privaten Pfad der App befindet, sollten Sie Ihren eigenen ContentProvider erstellen, da ich über den Link "OpenFileProvider" erstellt habe.