Android Kotlin - Intent createChooser - 从缓存/内存中共享 VideoView/MediaPlayer 的视频文件

问题描述

var medplay: MediaPlayer
holder.vidplayer.setVideoPath(fileUrl)
holder.vidplayer.setonPreparedListener { mp ->
    medplay = mp
}

我不想再次单独下载视频进行共享,而是共享已在 VideoView/MediaPlayer 中加载的文件,然后:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("video/*");
sharingIntent.putExtra(Intent.EXTRA_TEXT,"hey this is the video text");
sharingIntent.putExtra(Intent.EXTRA_STREAM,uriFromVideoView);
startActivity(Intent.createChooser(sharingIntent,"Share Video");

这可能吗?我也会接受替代方案/建议

解决方法

这可能吗?

没有。首先,对于所有类型的流来说,这在物理上是不可能的。除此之外,VideoView/MediaPlayer 不会将媒体写入磁盘。它们分块下载,以最大限度地减少 RAM 消耗,并将其仅用于播放。

我也会接受替代方案/建议

自行下载视频,例如使用 OkHttp。将下载的副本用于 setVideoPath()ACTION_SEND(后者最有可能是 FileProvider)。请注意,这仅适用于作为实际文件的视频流(例如,不适用于某些直播),并且需要先下载整个视频。