Android - 使用GSY实现视频播放和画中画悬浮窗

本文介绍了在Android应用中使用GSYVideoPlayer实现视频播放,并结合悬浮窗功能,详细阐述了如何引入依赖、设置悬浮窗权限、修改布局文件及处理播放过程中的问题。已测试多个品牌设备,具有播放进度记忆和权限检查功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 现完成功能:
  • 悬浮窗区分横屏竖屏两种尺寸
  • 悬浮窗可以在页面上随意拖动
  • 在播放视频时按返回键/Home键/离开当前页时触发开启
  • 悬浮窗显示在退到后台/在应用内/桌面
  • 带播放进度开启悬浮窗,带播放进度回到应用内页面
  • 权限:每次开启前判断有无权限,没权限并且请求过就不开悬浮窗

已通过现有机型测试:三星、华为、vivo
效果图

1.引入依赖
//完整版引入
implementation 'com.shuyu:GSYVideoPlayer:8.1.2'

github:https://github.com/CarGuo/GSYVideoPlayer(强烈建议下载Demo源码,每个方法注释写的很清晰)

踩坑1:部分依赖时 打包apk一播放视频就崩溃,连接真机正常播放。报错是aliplay原因,注释掉换一个播放器内核:

implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v8.3.4-release-jitpack'
//implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:8.3.4-release-jitpack'

PlayerFactory.setPlayManager(SystemPlayerManager.class); // 换个系统内核
2.清单文件声明悬浮窗权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
3.从Demo源码导出需要的15个文件加入自己项目,并进行部分修改

导出utils->floatUtil文件夹
导出video->manager->FloatingVideo.java
导出view->FloatPlayerView

1)修改悬浮窗布局 layout_floating_video,加上删除和回到应用的icon,点击播放/暂停的区域

layout_floating_video.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/surface_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

    </FrameLayout>

    <LinearLayout
        android:id="@+id/ll_center"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center">

        <moe.codeest.enviews.ENPlayView
            android:id="@+id/start"
            android:layout_width="35dp"
            android:layout_height="35dp" />

    </LinearLayout>

    <ImageView
        android:id="@+id/iv_delete"
        android:layout_width="38dp"
        android:layout_height="38dp"
        android:layout_alignParentLeft="true"
        android:padding="9dp"
        android:src="@drawable/video_small_close" />

    <ImageView
        android:id="@+id/iv_detail"
        android:layout_width="38dp"
        android:layout_height="38dp"
        android:layout_alignParentRight="true"
        android:padding="12dp"
        android:src="@drawable/video_enlarge" />

</RelativeLayout>

FloatingVideo.java

public class FloatingVideo extends StandardGSYVideoPlayer {
   
	//... 以下新添
	//用于跳转回对应页面
	public int newsId;
	private NewsDetailActivity activity;
	public FloatingVideo(Context context, int newsId, LaunchActivity activity){
   
        super(context);
        this.newsId = newsId;
        this.activity = activity;
    }
    @Override
    protected void init(Context context)</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值