如何在Android应用中实现VideoView内MP4视频跨应用分享
实现VideoView本地MP4视频分享的具体方案
首先你需要明确:视频无法像图片一样从VideoView中直接导出内容,必须提前拿到你正在播放的.mp4文件的本地绝对路径(你用来给VideoView设置播放源的路径就是你需要的路径)。
适配你原有逻辑的实现代码
你可以直接参考已有的图片分享逻辑修改,不需要对视频做转码压缩,直接读取本地文件构建分享Intent即可,示例如下:
public class VideoActivity extends AppCompatActivity { VideoView mparticularvideo; View share; // 存储待分享视频的本地路径 String videoLocalPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); getSupportActionBar().setTitle("视频"); mparticularvideo = findViewById(R.id.particularVideo); share = findViewById(R.id.share); // 给videoLocalPath赋值,就是你用来给VideoView设置播放源的文件路径 // 比如从跳转Intent取:videoLocalPath = getIntent().getStringExtra("video_path"); mparticularvideo.setVideoPath(videoLocalPath); mparticularvideo.start(); share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { shareVideo(); } }); } private void shareVideo() { // 沿用你原有的StrictMode配置,绕过7.0+的文件暴露限制 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); File videoFile = new File(videoLocalPath); Intent intent; try { intent = new Intent(Intent.ACTION_SEND); // 把MIME类型改成mp4视频对应的格式 intent.setType("video/mp4"); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(videoFile)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } catch (Exception e) { throw new RuntimeException(e); } startActivity(Intent.createChooser(intent, "分享这个视频到:")); } }
高版本系统兼容优化(可选)
你当前用StrictMode绕过文件权限的方式不是官方推荐方案,Android 7.0及以上系统建议使用FileProvider实现文件分享,避免后续系统版本升级出现兼容问题:
- 在AndroidManifest.xml中注册FileProvider组件
- 新增res/xml/file_paths.xml配置可分享的文件路径范围
- 分享时用
FileProvider.getUriForFile(context, 你的Provider授权字符串, videoFile)替换Uri.fromFile(videoFile) - 给Intent添加临时读取权限:
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
内容的提问来源于stack exchange,提问作者RUSHIKESH SONAWANE
相关产品推荐
相关产品推荐

