Если ваше приложение предназначено для Android N (7.0) и выше, вам не следует использовать ответы выше (метода «Uri.fromFile»), потому что оно не будет работать для вас.
Вместо этого,Вы должны использовать ContentProvider.
Например, если ваш файл изображения находится во внешней папке, вы можете использовать это (аналогично коду, который я сделал здесь ):
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);
манифест:
<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>
Если ваше изображение находится взакрытый путь приложения, вы должны создать свой собственный ContentProvider, так как я создал «OpenFileProvider» по ссылке.