仿微信悬浮窗的关键技术点

本文探讨了在Android项目中实现悬浮窗显示的解决方案,引用了EasyFloat开源库,并提出了在保持通话界面时遇到的问题。作者分析了微信语音通话保持后台运行的可能策略,并尝试调整Activity的显示状态,包括将其移到后台和恢复到前台的方法。同时,文章提供了相关代码示例来控制Activity的隐藏与显示。

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

下面的技术点已应用到实际项目中

1、如何显示悬浮窗

推荐一个开源库:https://github.com/princekin-f/EasyFloat
通过上面的开源库 悬浮窗已经可以显示了

但是下面确是值得思考的问题

1、悬浮窗什么时候显示就像微信语音通话中 我们点击一下那个缩小按钮 当前通过界面没有了 只显示了一个悬浮窗口 我们通过查看 栈中的Activity 发现在 微信 语音界面是被关闭掉了的,但我项目中的业务 如果语音界面被destory 那么这个通话就会被结束掉,所以是行不通过,猜想微信应该有个什么东西在后台一直保持这个通话。

2、既然 destory当前通话界面行不通(因为我不知道微信语音是如何保持这个通话的)那么我在想 我拿到当前页面的window 重新设置它的宽高、和透明度 宽高设置1个像素 试了一下 是显示的很小 但下面的页面还是不能操作 因为当前通话页面 还是在盖在上面的。

3、怎么办呢? 百度一下 如何让一个Activity切到后台?如何让一个Activity从后台切回前台。

image.png
2、如何控制被操作的Activity显示和隐藏

1、被操作Activity 的launchMode 设置为 singleTask 单独一个任务栈
2、被操作的Activity 切到后台代码

moveTaskToBack(true)

3、切回到前台

Intent intent = new Intent(TRTCVideoCallActivity.this.getApplicationContext(),TRTCVideoCallActivity.class);
                                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
                                        );
                                        getApplication().startActivity(intent);//getApplication()不可以去掉否则没用

参考代码:https://www.cnblogs.com/renjiemei1225/p/7457985.html

image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值