返回信息流折腾了几天,还是没有找到适用于普通应用屏蔽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);
没有任何效果。还是说我加的方式不对?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #14247同步于 2014/5/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
[更新] 安卓 4.0+ 怎么 屏蔽 home键?
lee15
2014/5/30镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
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切换动画
: 从这个方面搜索一下
来自「北邮人论坛手机版」
返回能监听,home好做吗?
【 在 ccyingzi2009 (影子) 的大作中提到: 】
: Activity里面 不是有按返回键的回调吗? 想一想按两次返回退出是怎么实现的。 把你的方法都放到这个里面。
通过『我邮2.0』发布
返回键是可以正常实现想要的效果。
但home会被系统framework层处理掉。在应用里虽然监听到了,但若不经过“某种处理”直接开始动画的话,动画播放不完整应用就退出了。 就是想知道这“某种处理”怎么能在按下home后延迟应用的退出,有时间让动画播完。
【 在 ccyingzi2009 的大作中提到: 】
: Activity里面 不是有按返回键的回调吗? 想一想按两次返回退出是怎么实现的。 把你的方法都放到这个里面。
那就参考一下壁纸应用吧。 貌似是可以拦截到home 的。 就是在壁纸应用里面按home键是不会回到系统主界面的,具体我也没实现过, 听师兄说过。
你是rw不
【 在 lee15 的大作中提到: 】
: 安卓 怎么在按下home键时 运行 控件 animation?
: 比如当前activity下一个imageview,要在按下home后台这个acitivity前运行一个animation。
: 按home后activity 会执行 onpause, onstop, 把animation放在这些里面都无法正常播放完毕就退出了。有什么方法可以做到吗?
拦截home键,在Animation的Listener里面
监听动画完毕,完毕以后再处理home键
【 在 lee15 (lee15) 的大作中提到: 】
: 安卓 怎么在按下home键时 运行 控件 animation?
: 比如当前activity下一个imageview,要在按下home后台这个acitivity前运行一个animation。
: 按home后activity 会执行 onpause, onstop, 把animation放在这些里面都无法正常播放完毕就退出了。有什么方法可以做到吗?
: ...................
问题就是貌似4.0及以后系统默认framework拦截了home键事件,不会把home键事件分发出来,普通应用里能监听到,但不能拦截。
按home键后应用就直接后台了,只是后台但没有死掉,动画会在后台继续播放(如果后台后马上再启动还能看到动画在继续播放),放onAnimationEnd里的操作也会在后台执行,但没界面了动画看不到就没意义了。
【 在 dss886 的大作中提到: 】
: 拦截home键,在Animation的Listener里面
: 监听动画完毕,完毕以后再处理home键
: