Android 4.0的HOME按键如何屏蔽啊?

Tody Guo 2012-03-25 09:31:03
请问各位有接触过屏蔽ANDROID 4.0中屏蔽HOME的代码么?
目前使用2.2与2.3中的方法无法屏蔽这个HOME键。还希望有经验的人给予指教。谢谢啦。
...全文
7049 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
mouse_xiaoli 2014-09-18
  • 打赏
  • 举报
回复
楼主,解决了吗?
红色贝鱼 2014-05-23
  • 打赏
  • 举报
回复
引用 45 楼 j491913750 的回复:
在onAttachedWindows()里写 this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED); 之后在onKeyDown里写相应的逻辑。 刚刚解决这个问题。
发现还是没有屏蔽啊,依旧按home退出去了。
南墙太近 2014-05-05
  • 打赏
  • 举报
回复
在onAttachedWindows()里写 this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED); 之后在onKeyDown里写相应的逻辑。 刚刚解决这个问题。
mzoy 2014-04-12
  • 打赏
  • 举报
回复
引用 43 楼 snow_1216 的回复:
[quote=引用 17 楼 li674688017 的回复:] 拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗? 散了吧。。。。
手机解锁应用[/quote] 有时还真就有这样的需求,我们的工业手机上就是这样要求的,只能运行本软件,其他操作需要权限才成
snow_1216 2014-03-29
  • 打赏
  • 举报
回复
引用 17 楼 li674688017 的回复:
拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗? 散了吧。。。。
手机解锁应用
caiwenfeng_for_23 2014-02-27
  • 打赏
  • 举报
回复
同求解决方案
奋斗的IT青年 2013-11-02
  • 打赏
  • 举报
回复
4.0版本还没有发现可行的方法,待解决!
atlantisy 2013-10-26
  • 打赏
  • 举报
回复
同求方案,同求方案
「已注销」 2013-10-17
  • 打赏
  • 举报
回复
有结论没,刚遇到这样的需求,在找方案解决中……
IT_Mr_Mo 2013-10-15
  • 打赏
  • 举报
回复
引用 28 楼 twoicewoo 的回复:
[Quote=引用 22 楼 的回复:] 引用 18 楼 的回复: 只是测试的目的而已。并非会做到第三方软件中。 世界上不是只有你一个程序员啊。。不是个个都有程序员的自我修养啊。。。 [/Quote] 4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。
引用 28 楼 twoicewoo 的回复:
[Quote=引用 22 楼 的回复:] 引用 18 楼 的回复: 只是测试的目的而已。并非会做到第三方软件中。 世界上不是只有你一个程序员啊。。不是个个都有程序员的自我修养啊。。。 [/Quote] 4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。
怎么做。求方法。不要做死狗
王懒蛋-_- 2013-09-05
  • 打赏
  • 举报
回复
引用 23 楼 tody_guo 的回复:
最近研究锁屏,按照常规的方法,常规方法如下 Java代码 收藏代码 public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 但是这个方法到了4.0的系统上就失效了,按home照样会返回桌面。apktool了几个锁屏的软件之后发现其实现方法,即用WindowManager的addview方法将view加到窗口上,加上的时候将view的layoutparamas的type设为LayoutParams.TYPE_SYSTEM_ERROR,这个值sdk的解释为 Java代码 收藏代码 public static final int TYPE_SYSTEM_ERROR Since: API Level 1 Window type: internal system error windows, appear on top of everything they can. 如果直接这样用会报错,还要在AndroidManifest.xml里面加上权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>,ok上完整代码,封装了一个类,其中Lock和hide方法实现锁屏和解锁。 Java代码 收藏代码 public class LockLayer { private Activity mActivty; private WindowManager mWindowManager; private View mLockView; private LayoutParams mLockViewLayoutParams; public LockLayer(Activity act) { mActivty = act; init(); } private void init(){ mWindowManager = mActivty.getWindowManager(); mLockViewLayoutParams = new LayoutParams(); mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT; mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT; //实现关键 mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR; //apktool value,这个值具体是哪个变量还请网友帮忙 mLockViewLayoutParams.flags = 1280; } public void lock() { if(mLockView!=null){ mWindowManager.addView(mLockView, mLockViewLayoutParams); } } public void unlock() { if(mWindowManager!=null){ mWindowManager.removeView(mLockView); } } public void setLockView(View v){ mLockView = v; } } 使用方法如下 Java代码 收藏代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View lock = View.inflate(this, R.layout.main, null); LockLayer lockLayer = new LockLayer(this); lockLayer.setLockView(lock); lockLayer.lock(); } ok,这时可以实现按home键不返回桌面的效果,其他的键需要用另外的代码实现,网上都有。这段代码只调用一次的时候没有问题,但是如果遇到多线程或者多次lock和hide就会有问题,修改如下,一是将LockLayer改为单例模式,二是在hide和lock的时候先判断状态。修改后代码如下 Java代码 收藏代码 public class LockLayer { private Activity mActivty; private WindowManager mWindowManager; private View mLockView; private LayoutParams mLockViewLayoutParams; private static LockLayer mLockLayer; private boolean isLocked; public static synchronized LockLayer getInstance(Activity act){ if(mLockLayer == null){ mLockLayer = new LockLayer(act); } return mLockLayer; } private LockLayer(Activity act) { mActivty = act; init(); } private void init(){ isLocked = false; mWindowManager = mActivty.getWindowManager(); mLockViewLayoutParams = new LayoutParams(); mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT; mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT; //实现关键 mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR; //apktool value,这个值具体是哪个变量还请网友帮忙 mLockViewLayoutParams.flags = 1280; } public synchronized void lock() { if(mLockView!=null&&!isLocked){ mWindowManager.addView(mLockView, mLockViewLayoutParams); } isLocked = true; } public synchronized void unlock() { if(mWindowManager!=null&&isLocked){ mWindowManager.removeView(mLockView); } isLocked = false; } public synchronized void setLockView(View v){ mLockView = v; } } 还有个问题是mLockViewLayoutParams.flags = 1280;1280这个值具体是哪个变量还不知道,有知道的留个言。 LockScreen.zip (148.2 KB) 下载次数: 0
这个我使用过,源网页给的源码直接不能用,资历浅我没看出来原理。直接弃用。。。。。。。。
王懒蛋-_- 2013-09-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:] 拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗? 散了吧。。。。 [/Quote] 其实只是做个解锁的软件
王懒蛋-_- 2013-09-05
  • 打赏
  • 举报
回复
引用 1 楼 ultrapro 的回复:
自己做rom,把home相关处理去掉,只在应用中是无法做到的。
让我情何以堪
beiminglei 2013-08-23
  • 打赏
  • 举报
回复
引用 31 楼 lsqwdx91805605 的回复:
public void onAttachedToWindow() { this.getWindow().setHomeKeyEnable( WindowManager.LayoutParams.HOME_KEY_INTERCEPT_ENABLE); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 4.0之后的版本,屏蔽Home键,需如此做
你这么做成功了?根本找不到方法和常量
火锅鸡的味道 2013-08-15
  • 打赏
  • 举报
回复
引用 32 楼 liuborama 的回复:
[quote=引用 31 楼 lsqwdx91805605 的回复:] public void onAttachedToWindow() { this.getWindow().setHomeKeyEnable( WindowManager.LayoutParams.HOME_KEY_INTERCEPT_ENABLE); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 4.0之后的版本,屏蔽Home键,需如此做
不靠谱,sdk中红色的方法setHomeKeyEnable和flag HOME_KEY_INTERCEPT_ENABLE都没有啊。[/quote] 这个应该是 FLAG_HOMEKEY_DISPATCHED 直接setAttributes传进去就可以了
liuborama 2013-06-05
  • 打赏
  • 举报
回复
引用 31 楼 lsqwdx91805605 的回复:
public void onAttachedToWindow() { this.getWindow().setHomeKeyEnable( WindowManager.LayoutParams.HOME_KEY_INTERCEPT_ENABLE); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 4.0之后的版本,屏蔽Home键,需如此做
不靠谱,sdk中红色的方法setHomeKeyEnable和flag HOME_KEY_INTERCEPT_ENABLE都没有啊。
令狐湘 2013-04-09
  • 打赏
  • 举报
回复
public void onAttachedToWindow() { this.getWindow().setHomeKeyEnable( WindowManager.LayoutParams.HOME_KEY_INTERCEPT_ENABLE); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 4.0之后的版本,屏蔽Home键,需如此做
sckalman 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗?

散了吧。。。。
[/Quote]

免费的 平板设备 只提供给特定的商家 使用特定的软件 这样的需求难道不合理么
Tody Guo 2012-10-20
  • 打赏
  • 举报
回复
可以贡献一下方法么?呵呵、我到现在都还没有解决这个问题。呵呵
我是彬哥 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]

引用 18 楼 的回复:

只是测试的目的而已。并非会做到第三方软件中。


世界上不是只有你一个程序员啊。。不是个个都有程序员的自我修养啊。。。
[/Quote]
4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。
加载更多回复(26)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧