Как поделиться видео с любым приложением с помощью Intent?

Проблема: Что происходит после публикации видео, когда я запускаю приложение для проверки общего видео, оно показывает мне ошибку «Невозможно импортировать» и «Видео больше не доступно».

Версия для 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, но ничего не получается, и я также задавал различные похожие вопросы, но в случае с видео решение не работает.

Пожалуйста, помогите мне с этой проблемой, а также, если есть какой-либо альтернативный способ сделать это?

1
0
1 704
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавить это в свой 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);

Метод m = StrictMode.class.getMethod("disableDeathOnFileUriExposure"); m.invoke (ноль);

sak 10.04.2019 10:55

Вышеупомянутое также сработало, не могли бы вы объяснить, почему FileProvider не работает?

sak 10.04.2019 10:55

и, пожалуйста, обновите свой ответ небольшим объяснением, чтобы я мог принять его как ответ

sak 10.04.2019 10:57

Я отредактировал свой ответ с более подробной информацией. Теперь вам необходимо указать своего провайдера в манифесте

Mbuodile Obiosio 10.04.2019 11:00

Первое решение работает для меня, но почему бы не файловый провайдер?

sak 10.04.2019 11:02

Другие вопросы по теме