前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android关于悬浮窗锁屏或截图后消失的问题解决方法

Android关于悬浮窗锁屏或截图后消失的问题解决方法

作者头像
Vaccae
修改2019-07-25 11:00:41
2.7K1
修改2019-07-25 11:00:41
举报
文章被收录于专栏:微卡智享微卡智享

前言

我们前面已经讲过关于悬浮窗的两篇文章

Android实现可移动的悬浮窗

Android悬浮窗不用动态申请权限方法

其中第一篇就是里面有针对android8.0后怎么开启悬浮窗的权限问题,必须要把应用的顶层权限开启才可以使用。

而第二篇文章就是觉得当你打开应用前先要申请开启顶层权限比较麻烦,对用户体验不是很好,所以改为了用TYPE_TOAST的方式,完全不用申请顶层权限的方法了。

今天我们就说一说第二种方法在android8.1锁屏的时候遇到的问题。

问题及解决思路

我们的程序在android8.1下悬浮窗正常使用,但是如果我们这时候锁屏了,或是截取屏幕后,我们的悬浮窗就会自己消失了。

我现在试到的就是这两个,不过我觉得应该是有别的东西在上层挡住了后就会出现这个情况。因为在查代码的时候发现我们的windowsmanage里面的view还是存在的,只不过没有显示出来。

为了不影响使用效果并且可以更简单的解决这个问题,我想了一个方法,就是在windowsmanage每次刷新的时候做一个计数的功能,每多少次刷新后我们删除了view再重新创建。

实现效果

https://v.qq.com/x/page/n1349txxsbk.html

<br />

上面的视频可以看到,我们做了个截屏操作后,悬浮窗一会自动消失了,不过很快就又自动显示出来了。

核心代码

实现可移动的悬浮窗效果我们可以从《Android实现可移动的悬浮窗》这个文章里看到代码,我们这里只说解决的这块。

我们首先要把MyWindowManage里面的updaetUsedPercent这个函数改造,在参数后面加了一个boolean的值,用于判断是否要重新建View,如果是的话我们就删除原来的view后再重新addview,如果不用的话直接就是原来的代码更新即可。下图中红框中就是我们新增加的判断部分。

为了防止以前的调用不用更改了,我们建了一个重载方法,这样默认不输入后面的参数时就是不刷新


然后我们就看看在FloatWindow的这个服务里调用这个更新方法的代码

首先上面我们加入了一个updatetimes的int类型变量,然后上面绿色框里面是原先的代码,我们这里就是改造了一下,当updatetimes次数大于10了后我们就执行windowmanage里面的View删除后重新创建,然后把updatetimes重置为0,当小于10的时候就按原来的定时刷新View,然后updatetimes加1.

这样就完美解决了我们出现悬浮窗消失的问题。


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档