Проблема: Что происходит после публикации видео, когда я запускаю приложение для проверки общего видео, оно показывает мне ошибку «Невозможно импортировать» и «Видео больше не доступно».
Версия для Android: Орео (8.0)
Код: Я пытаюсь с помощью следующего кода поделиться видео с другими приложениями, используя намерение:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("video/*");
share.putExtra(Intent.EXTRA_SUBJECT, "abc");
share.putExtra(Intent.EXTRA_TITLE, "abcd");
File imageFileToShare = new File(Environment.getExternalStorageDirectory() + "/mygallery/" + "airp.mp4");
Uri uri = FileProvider.getUriForFile(Main2Activity.this, "abc.dcf.fileprovider", imageFileToShare);
share.putExtra(Intent.EXTRA_STREAM, uri);
share.setPackage("com.abc.in");
startActivity(Intent.createChooser(share, "Message"));
Приведенный выше код отлично работает для обмена изображениями, но не работает для обмена видео.
Что я пробовал: Я пробовал делиться различными типами файлов, такими как 3gp, mkv, mp4, но ничего не получается, и я также задавал различные похожие вопросы, но в случае с видео решение не работает.
Пожалуйста, помогите мне с этой проблемой, а также, если есть какой-либо альтернативный способ сделать это?
Вы можете добавить это в свой OnCreate
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
Если это не работает для вас,
Добавьте провайдера в манифест, выполнив это
<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>
Не забудьте использовать android:name = "androidx.core.content.FileProvider"
, если вы используете androidx
Создайте файл в каталоге xml (res/xml) и назовите его provider_paths.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>
Заменять
Uri uri = FileProvider.getUriForFile(Main2Activity.this, "abc.dcf.fileprovider", imageFileToShare);
с этим
Uri uri = FileProvider.getUriForFile(Main2Activity.this, BuildConfig.APPLICATION_ID + ".provider",imageFileToShare);
Вышеупомянутое также сработало, не могли бы вы объяснить, почему FileProvider не работает?
и, пожалуйста, обновите свой ответ небольшим объяснением, чтобы я мог принять его как ответ
Я отредактировал свой ответ с более подробной информацией. Теперь вам необходимо указать своего провайдера в манифесте
Первое решение работает для меня, но почему бы не файловый провайдер?
Метод m = StrictMode.class.getMethod("disableDeathOnFileUriExposure"); m.invoke (ноль);