前言
本篇以简单的浮窗视频为例, 练习 Service, 浮窗, MediaPlayer视频播放等;
本篇涉及内容:
Service 的基本用法;MediaPlayer 播放本地视频通过 WindowManager 添加浮窗Android Result API 自定义协议类, 校验浮窗权限
一、先来张效果图

二、使用步骤
1.配置清单文件
<!-- SD卡读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 8.0 以上 前台服务权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 悬浮窗权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
...
<!-- 读取本地文件需要 -->
android:requestLegacyExternalStorage="true" >
<!-- 自定义的视频浮窗 Service -->
<service android:name=".test.textservice.VideoFloatingService"/>
2.编写 Service
这次的 Service 并没有 上一篇 简单的音乐播放器 中的 Service 复杂;
只需要初始化 MediaPlayer, 播放视频. 添加悬浮窗. 以及内部简单的控制逻辑;
class VideoFloatingService: Service() {
private val TAG = "VideoFloatingService"
private lateinit var windowManager: WindowManager
private lateinit var layoutParams: WindowManager.LayoutParams
private lateinit var binding: ViewVideoFloatingBinding
private lateinit var mediaPlayer: MediaPlayer
override fun onCreate() {
super.onCreate()
init() // 初始化播放器
showFloatingWindow() // 添加浮窗
}
override fun onBind(intent: Intent?): IBinder? = null
private fun showFloatingWindow() {
windowManager = getSystemService(WINDOW_SERVICE) as WindowManager
// 初始化浮窗 layoutParams
layoutParams = WindowManager.LayoutParams().also {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
it.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
it.type = WindowManager.LayoutParams.TYPE_PHONE
}
it.format = PixelFormat.RGBA_8888
it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// 浮窗位置和尺寸, 偏移量等
it.gravity = Gravity.CENTER_VERTICAL or Gravity.START
it.width = WindowManager.LayoutParams.WRAP_CONTENT
it.height = WindowManager.LayoutParams.WRAP_CONTENT
it.x = 0
it.y = 0
}
// 初始化浮窗布局, 为播放按钮添加事件; 为整个浮窗添加触摸监听(满足拖动, 点击等)
binding = ViewVideoFloatingBinding.inflate(LayoutInflater.from(this))
binding.ivPlay.setOnClickListene
视频浮窗与Service实战:Android画中画功能实现

本文详细介绍了如何在Android应用中实现视频浮窗功能,包括使用Service播放视频、配置权限、创建浮动窗口,并探讨了如何启用画中画模式。通过实例演示了自定义权限请求和SurfaceView的使用,适合新手学习多媒体服务和Android高级特性。
最低0.47元/天 解锁文章
2794

被折叠的 条评论
为什么被折叠?



