为了实现语音聊天室源码的多场景应用,悬浮小窗口在语音聊天室源码开发中还是比较常见的需求,主要是指用户在语音连麦过程中打开其它界面或者退到桌面时语音连麦不会中断且会有一个悬浮小窗口位于最上层,接下来我们一起看看实现思路。

实现思路

在聊天室源码开发中,其实很容易就能想到,可以通过 WindowManager的 addView()实现,不过需要用户同意悬浮窗的权限,如果聊天室源码是想实现应用内的悬浮窗,也可以去获取 DecorView给它添加一个View,这样就不用去获取权限了。

悬浮窗权限获取

manifest添加权限

<!--    悬浮窗权限-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

给Window设置一下type类型,这里 8.0 版本之后类型有改变这里做个判断

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
}

权限判断
聊天室源码悬浮窗需要用户手动开启,这里需要给用户做一个引导

if (!Settings.canDrawOverlays(this)) { // 判断是否有权限val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)// packageName 是应用的包名intent.data = Uri.parse("package:$packageName")// 直接打开系统的同意界面给用户操作startActivityForResult(intent, REQ_CODE_1000)
}@RequiresApi(Build.VERSION_CODES.M)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)if (requestCode == REQ_CODE_1000) {if (Settings.canDrawOverlays(this)) {// 用户同意了就可以进行其它操作了}}
}

处理滑动和惯性滑动

滑动的处理是通过 WindowManager的updateViewLayout()方法,根据滑动的距离改变Window的位置,不过处理滑动前要计算一下滑动的距离是否超过了可滑动的边界,不能让我们的聊天室源码悬浮窗跑到屏幕外面去。

惯性滑动就是模板代码了,交给GestureDetector的onFling()方法,然后通过OverScroller计算当前滑动的值。

还要一点需要注意,我们的聊天室源码悬浮窗不仅要处理滑动时间还要处理点击事件,当用户点击窗口的时候还要回到语音连麦页面的,当前面吧onTouchEvent交给GestureDetector去处理时点击事件就不起作用了,也就是setOnClickListener设置没有作用了,这边要手动调一下这个回调。

override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {// 触发 onClick() 回调performClick()return true
}

封装思路

聊天室源码悬浮窗有一些可变部分和不变部分,可变的就是悬浮窗的样式以及具体播放的操作,不变的就是滑动的操作,所以把这两部分分开,使用适配器模式连接这两部分,在适配器里面用户可以自定义布局和实现自己的业务逻辑。由于聊天室源码悬浮窗要作用于全局,同一时间只能有一个,所以用一个单例类FloatWindow去管理 View 的添加删除操作。

// 创建 FloatView 设置 Adapter
val floatView = FloatView(this).apply {setAdapter(SimpleAdapter())
}
// 把 View 设置给 Window
FloatWindow.getInstance(this).bindView(floatView)
// 移除 Window
FloatWindow.getInstance(this).removeView()

以上就是“Android聊天室源码开发,悬浮窗的实现及封装思路”的全部内容了,希望对大家有帮助。

Android聊天室源码开发,悬浮窗的实现及封装思路相关推荐

  1. 语音聊天室源码开发点赞功能,用 MySQL 还是 Redis ?

    为了提升用户在语音聊天室源码中的互动性,一般在开发动态广场功能时会支持用户间对动态进行点赞,所以点赞功能可以说是语音聊天室源码开发的基础性功能,今天我们就来聊聊点赞.评论.收藏等这些场景的db数据库设 ...

  2. 类似9158视频聊天室源码开发方案

    类似新浪聊天室和呱呱聊天室,99CU等表现形式,聊天大厅和聊天房间可以自由切换. 2. 数据库最好使用MS SQL,程序代码模块化开发,有充分的扩展性以及接口,二次开发方便. 3. 通过IE浏览器,即 ...

  3. 聊天室平台搭建【免费下载 无需积分/C币】java、Android、php多平台聊天室源码打包下载

    关键词:多款聊天平台源码合集免费下载 #聊天源码,#聊天工具,#源码下载,#仿QQ,#聊天室源码 聊天室平台搭建 搭建自己的聊天交流平台 [点击此处]下载源码 原网址:https://download ...

  4. YShout一款PHP+TXT+Ajax嵌入式在线聊天室源码

    简介: YShout是一款PHP+TXT+AJAX开发嵌入式在线聊天室源码,UTF-8编码. 可以非常方便的嵌入到的你的网站中,无需数据库,采用TXT存储数据,小巧灵活,移植方便.采用AJAX技术,增 ...

  5. 使用 Redis 实现语音社交聊天室源码中的排行榜功能

    在语音社交聊天室源码中,排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择. 一般语音社交聊天室源码的排行榜都是有实效性的,比如"用户积分榜&quo ...

  6. 仿9158 VC++视频聊天室源码

    视频聊天室源码简介: 成熟产品可提供全套系统源代码(包服务端,客户端,网站平台) 采用C++语言开发系统速度快,稳定.H264视频编解码视频清晰,流畅,同时3路视频

  7. 高清视频会议 视频聊天室源码下载

    高清视频会议.视频聊天室源码简介: "SDK即时通讯平台"是一套跨平台的即时通讯解决方案,基于先进的H.264视频编码标准.AAC音频编码标准与P2P技术,支持高清视频,整合了佰锐 ...

  8. 语音聊天室源码中的变声,应用了哪些算法?

    导读:2021开年以来,语音聊天室源码伴随着Clubhouse的爆火再获资本的关注,国内相关产品都迎来了股价的大幅上涨,预计未来音频化在社交领域还会有长期且广泛的需求. 在移动互联网技术加持下,语音聊 ...

  9. 开源版-在线客服系统源码_网页聊天室源码_webim

    2019独角兽企业重金招聘Python工程师标准>>> WoLive是一款在线客服系统源码,支持PC Web和移动端,只需嵌入一段js代码即可快速接入.购买后可私有化部署,WoLiv ...

最新文章

  1. Opengl-基本章节的学习成果
  2. spring cloud 自定义配置源及配置刷新
  3. python读文件去除空行_「34」Python文件操作经典案例:CSV文件的读与写
  4. 魅族 虚拟位置服务状态:未运行_魅族17评测:「重量平衡设计」 手感出色 魅友们的5G梦想旗舰...
  5. 递推与储存,是动态规划的关键
  6. 内存管理检查方法和工具
  7. cxf webservice:异常SOAPFaultException: Unexpected wrapper element found解决
  8. 研究自动驾驶技术的算法需要哪些知识?
  9. 深度解析copy与strong的区别
  10. Stylus Studio 2010 XML 的激活码
  11. 使用xftp怎么向服务器传输文件,如何使用文件传输软件Xftp
  12. 计算机科学 vs 计算机技术
  13. 用Python分割文件夹
  14. 计算机网络笔记4 网络层
  15. 利用线程池来处理Excel导出功能
  16. 工信部关白玉处长详解“核高基”
  17. Web App与Native App
  18. java中static的用法_Java类中static的用法
  19. ArchLinux 的 pacman 命令详解
  20. 如何为您的在线业务设置和使用YouTube

热门文章

  1. Windows+Jenkins+Spring Boot+SNV自动打包运行
  2. 如何利用计算机打德文,电脑安装德语输入法的详细步骤
  3. android系统自动抓取log方法
  4. html--innerHTML用法及和与innerText区别
  5. mft按钮设计_大机组MFT硬跳闸回路设计方案
  6. 3D角色模型欣赏:绫波丽
  7. css怎么动画中该透明度,CSS如何实现透明度变化的动画
  8. SDINDDH6-128G-ZA通用闪存存储器 - UFS WD/SD
  9. 一加6html查看程序,一加手机6亮相ChinaJoy,终于明白西装暴徒含义
  10. VBA for Excel 筛选功能 autofilter