You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动Android视频播放器Activity时如何禁止其播放完成后自动退出

核心前提说明

你通过Intent.ACTION_VIEW调用的是系统默认/用户自行设置的第三方视频播放器,播放结束后的退出逻辑由播放器自身实现,Android系统没有提供标准化的强制控制API,可通过两种方案实现需求:


方案1:给Intent添加通用额外参数(兼容性依赖播放器实现)

绝大多数主流系统自带播放器、第三方通用播放器都适配了两个行业通用的额外参数,你可以直接在原代码中添加参数即可:

File file = new File(galleryList.get(getAbsoluteAdapterPosition()).getPath());
Intent i = new Intent(Intent.ACTION_VIEW);
if (GalleryMediaHelper.isVideoFile(galleryList.get(getAbsoluteAdapterPosition()).getPath())) {
    i.setDataAndType(FileProvider.getUriForFile(context, AUTHORITY, file), "video/*");
}
// 新增参数:开启循环播放,和下方结束不退出参数二选一即可
i.putExtra("looping", true);
// 新增参数:播放完成后不自动退出,停在最后一帧,和上方循环参数二选一即可
// i.putExtra("exit_on_completion", false);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
if (i.resolveActivity(context.getPackageManager()) != null)
    context.startActivity(i);

该方案优势是不需要修改原有业务逻辑,缺点是不能保证100%适配所有设备,部分厂商定制ROM的自带播放器可能不识别上述参数。


方案2:内嵌播放组件(100%可控,兼容性最好)

如果要求所有设备都符合需求,建议直接在应用内嵌入播放组件,完全自行控制播放逻辑,比如使用系统原生VideoView或Jetpack Media3组件:

// 布局中添加VideoView组件后直接调用
VideoView videoView = findViewById(R.id.video_view);
Uri videoUri = FileProvider.getUriForFile(context, AUTHORITY, file);
// 授予Uri读取权限
context.grantUriPermission(context.getPackageName(), videoUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
videoView.setVideoURI(videoUri);
videoView.setOnPreparedListener(mediaPlayer -> {
    // 方案A:开启循环播放
    mediaPlayer.setLooping(true);
    
    // 方案B:播放完成后停在最后一帧,不自动退出,注释上一行打开下面代码即可
    /*
    mediaPlayer.setOnCompletionListener(mp -> {
        // 不需要做额外操作,默认停在最后画面,用户点返回键关闭当前播放页面即可
    });
    */
});
videoView.start();

内容的提问来源于stack exchange,提问作者user14576370

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:54:03