BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #14247同步于 2014/5/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

[更新] 安卓 4.0+ 怎么 屏蔽 home键?

lee15
2014/5/30镜像同步13 回复
折腾了几天,还是没有找到适用于普通应用屏蔽Home的方法。 直接一点的话还是得改一下下面这段,在应用中设置一个自定义Flag,在下面代码判断有这个Flag的话返回0,就能屏蔽Home了。 看4.2源码 PhoneWindowManager.java, public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) { ... // First we always handle the home key here, so applications // can never break it, although if keyguard is on, we do let // it handle it, because that gives us the correct 5 second // timeout. if (keyCode == KeyEvent.KEYCODE_HOME) { ... // If a system window has focus, then it doesn't make sense // right now to interact with applications. WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null; if (attrs != null) { final int type = attrs.type; if (type == WindowManager.LayoutParams.TYPE_KEYGUARD || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) { // the "app" is keyguard, so give it the key return 0; } /// A{ the window wants to handle homekey event, so give it the key final int flag = attrs.flags; if ((flag & FLAG_HOMEKEY_DISPATCHED) != 0) { return 0; } /// }A ... } ... } ... } 只有TYPE_KEYGUARD这里返回0,把Home键事件发出去,其他情况都会拦截掉。 但在setContentView()前加上 getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 没有任何效果。还是说我加的方式不对?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
icyfox机器人#1 · 2014/5/30
你这个叫做Acitivity切换动画 从这个方面搜索一下
lee15机器人#2 · 2014/5/30
activity切换可以overridependingtransition或者activityoptions.makecustomanimation,或者style里加动画, 但这些是对activity整体的切换动画。 我的意思是按home后只有布局中的某一个控件运行动画,完整播放后再返回launcher。测试中一旦按home,比如一个duration设为3000的动画可能只播放100样子,就已经onstop整个界面都不在了回到launcher。 开个sleep线程,在super.onpause前 thread.join,虽然log里看到stop延迟了,但还是一闪而过回到launcher。 添加animationlistener的话,也不能在animationend里运行super.onpause,会抛异常。 按back键,在onbackpressed里动画是没问题的。 【 在 icyfox 的大作中提到: 】 : 你这个叫做Acitivity切换动画 : 从这个方面搜索一下 来自「北邮人论坛手机版」
ccyingzi2009机器人#3 · 2014/5/31
Activity里面 不是有按返回键的回调吗? 想一想按两次返回退出是怎么实现的。 把你的方法都放到这个里面。
icyfox机器人#4 · 2014/5/31
返回能监听,home好做吗? 【 在 ccyingzi2009 (影子) 的大作中提到: 】 : Activity里面 不是有按返回键的回调吗? 想一想按两次返回退出是怎么实现的。 把你的方法都放到这个里面。 通过『我邮2.0』发布
lee15机器人#5 · 2014/5/31
返回键是可以正常实现想要的效果。 但home会被系统framework层处理掉。在应用里虽然监听到了,但若不经过“某种处理”直接开始动画的话,动画播放不完整应用就退出了。 就是想知道这“某种处理”怎么能在按下home后延迟应用的退出,有时间让动画播完。 【 在 ccyingzi2009 的大作中提到: 】 : Activity里面 不是有按返回键的回调吗? 想一想按两次返回退出是怎么实现的。 把你的方法都放到这个里面。
ccyingzi2009机器人#6 · 2014/5/31
那就参考一下壁纸应用吧。 貌似是可以拦截到home 的。 就是在壁纸应用里面按home键是不会回到系统主界面的,具体我也没实现过, 听师兄说过。
picls机器人#7 · 2014/5/31
你是rw不 【 在 lee15 的大作中提到: 】 : 安卓 怎么在按下home键时 运行 控件 animation? : 比如当前activity下一个imageview,要在按下home后台这个acitivity前运行一个animation。 : 按home后activity 会执行 onpause, onstop, 把animation放在这些里面都无法正常播放完毕就退出了。有什么方法可以做到吗?
dss886机器人#8 · 2014/5/31
拦截home键,在Animation的Listener里面 监听动画完毕,完毕以后再处理home键 【 在 lee15 (lee15) 的大作中提到: 】 : 安卓 怎么在按下home键时 运行 控件 animation? : 比如当前activity下一个imageview,要在按下home后台这个acitivity前运行一个animation。 : 按home后activity 会执行 onpause, onstop, 把animation放在这些里面都无法正常播放完毕就退出了。有什么方法可以做到吗? : ...................
lee15机器人#9 · 2014/5/31
问题就是貌似4.0及以后系统默认framework拦截了home键事件,不会把home键事件分发出来,普通应用里能监听到,但不能拦截。 按home键后应用就直接后台了,只是后台但没有死掉,动画会在后台继续播放(如果后台后马上再启动还能看到动画在继续播放),放onAnimationEnd里的操作也会在后台执行,但没界面了动画看不到就没意义了。 【 在 dss886 的大作中提到: 】 : 拦截home键,在Animation的Listener里面 : 监听动画完毕,完毕以后再处理home键 :