Если targetSdkVersion больше 24, то FileProvider используется для предоставления доступа.
Создайте XML-файл с именем provider_paths.xml в res \ xml , сследующий код:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
Затем вам нужно добавить провайдера в AndroidManifest.xml внутри тега приложения
<provider
android:name="android.support.v4.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>
Теперь получите путь к своим фотографиям следующим образом:
final File photoFile = new File(Environment.getExternalStorageDirectory().toString(), "/path/filename.png");
Теперь получите Photo URI так:
Uri photoURI = FileProvider.getUriForFile(SavedCardActivity.this,
BuildConfig.APPLICATION_ID + ".provider",
photoFile);
И чтобы поделиться, используйте этот код:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, photoURI);
getApplicationContext().startActivity(Intent.createChooser(shareIntent, "Share image using"));
} else {
final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(photoFile));
startActivity(Intent.createChooser(shareIntent, "Share image using"));
}