搜悬浮窗可以搜到很多方法,但针对Home 、 back 事件具体的很少。
最近公司让我在做这方面的功能,集中众人力量,受益匪浅啊。
简单介绍吧,悬浮窗接收不到Home监听;back也不能直接给悬浮窗,试过一些博客的做法,view.setKeyEventListener处理是不成功的。
home思路:
要想启动悬浮窗时接收到home的监听,需要同时启动一个activity,将home监听交给activity,监听时消失掉悬浮窗。否则不用想通过按home消失悬浮窗。
当然有人问了,那写的功能直接写在activity就行了呗。我们公司的规定,尽量少写activity,少动manifest文件。我这种小菜鸟,还不到能动这些组件的权利,能规避就规避。
back思路:
悬浮窗的view用的xml文件,线性布局或相对布局等,要重写几个方法 public boolean dispatchTouchEvent(MotionEvent event) {} 、public boolean dispatchKeyEvent(KeyEvent event) {}等
而调setKeyEventListener()方法的主体,必须是重写过上面方法的布局的id转化:重写布局类 layout = (重写布局类) inflater.inflate(R.layout.view_float, null);
layout.setKeyEventListener(new KeyEventListener() {
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return false;
}
@Override
public boolean onBackPressed() {
return false;
}
});
public interface KeyEventListener {
boolean onKeyDown(int keyCode, KeyEvent event);
boolean onKeyUp(int keyCode, KeyEvent event);
boolean onBackPressed();
}
如此才会成功。
刚刚从公司大牛处得知,长按home进入进程时让悬浮窗消失更麻烦,我在研究中
下面链接是研究的一个文章: