android弹窗不能手动关闭_Android app(Service)如何在后台随时随地弹出/关闭悬浮窗?...

需求

语音唤醒后在系统任意界面(应用)弹出悬浮窗(定制设备,非手机)。

问题

进程在前台时没问题,悬浮窗可以开关,进程转到后台以后就不行,即栈顶是其他应用的时候,悬浮窗弹不出,回到自己 app 查看,发现悬浮窗只显示在自己的 app 里面,无法在最顶层绘制。

失败尝试

( x )打开前台服务

( x )在打开其他应用前先打开悬浮窗,然后根据唤醒状态改变透明度

( x )分别使用 EventBus/Handler/Thread+Looper 进行尝试

( x )分别使用 Dialog/WindowManager/开源控件进行尝试

5.0/6.0/8.0 系统试了都不行,哪位大佬知道这问题怎么解决,能提供调试的思路也好,谢谢

代码

mView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.float_window, null);

mWindowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);

mLayoutParams = new WindowManager.LayoutParams();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;

} else {

mLayoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;

}

mLayoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;

mLayoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;

mLayoutParams.x = 30;

mLayoutParams.y = 30;

mLayoutParams.gravity = Gravity.START | Gravity.BOTTOM;

mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;

mLayoutParams.format = PixelFormat.TRANSLUCENT;

mWindowManager.addView(mView, mLayoutParams);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值