在onAttachedWindows()里写 this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED); 之后在onKeyDown里写相应的逻辑。 刚刚解决这个问题。
[quote=引用 17 楼 li674688017 的回复:] 拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗? 散了吧。。。。
拜托做程序员有点逻辑思维好不好,你做个第三方软件屏蔽了home键,再屏蔽菜单键返回键,全屏,设为开机启动,这手机还能用吗?这系统还能火吗? 散了吧。。。。
[Quote=引用 22 楼 的回复:] 引用 18 楼 的回复: 只是测试的目的而已。并非会做到第三方软件中。 世界上不是只有你一个程序员啊。。不是个个都有程序员的自我修养啊。。。 [/Quote] 4.0之前能屏蔽Home键,也没见哪个应用伤害了用户的手机啊,我最近也要写一个测试软件用来工厂测试中测试home键是否可用,我用了同行的一些工厂测试软件,发现这个是可以做到的,如果你做不到,也不要用道德层面来鄙视别人,不是每个人学点东西都是用来作恶的,这仅仅是一个项目需求。
最近研究锁屏,按照常规的方法,常规方法如下 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
自己做rom,把home相关处理去掉,只在应用中是无法做到的。
public void onAttachedToWindow() { this.getWindow().setHomeKeyEnable( WindowManager.LayoutParams.HOME_KEY_INTERCEPT_ENABLE); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 4.0之后的版本,屏蔽Home键,需如此做
[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键,需如此做
80,351
社区成员
91,288
社区内容
加载中
试试用AI创作助手写篇文章吧