При совместном использовании файла с другим приложением вам необходимо предоставить разрешения Uri
.
Для этого вам сначала нужно создать провайдера в вашем Manifest
, например:
<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>
@xml/provider_paths
будет выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="SavedImages" path="Android/data/com.yourpackagename.yourappname/files/SavedImages/"/>
</paths>
Вы должны будете создать вышеупомянутое в вашей папке res
-> xml
, которую я назвал моей provider_paths.xml
Если у вас нет папки xml, создайте ее.
, тогда, когда вы поделитесь своим файлом, вы должны предоставить разрешения:
Uri imageUri;
Intent share = new Intent(Intent.ACTION_SEND);
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
imageUri = Uri.parse("file:///sdcard/temporary_file.jpg");
}else {
File newFile = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");
imageUri = FileProvider.getUriForFile(getContext(), getContext().getPackageName() + ".provider", newFile);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
share.setType("image/jpeg");
share.putExtra(Intent.EXTRA_STREAM, imageUri);
share(Intent.createChooser(share, "Share image using"));
Честно говоряне думайте, что ваша проблема связана с разрешениями во время выполнения. Если это так, вы получите сбой, и файл не будет создан.Как вы указали в своем вопросе It produces a black screen cap as a picture when share button is clicked... No file is created, no error is found.
.
Если не предоставить разрешения Uri
, другая рука, скорее всего, выдаст исключение Uri.
Файл все равно будет создан,но это было бы пусто.Как вы испытываете.