Android屏蔽Home按键
来源:互联网 发布:c 开发 gprs源码 编辑:程序博客网 时间:2024/05/21 10:46
Android屏蔽Home按键
一、前提条件
1.1 有整套系统源码以及对应测试机器
1.2 在Linux系统下进行开发
二、实现效果
2.1 在某个APP使用Home键无效,无法退出应用程序。
三、修改代码原理简述
2.1 想要屏蔽Home按键必须在Framework层中进行处理,Application层无法进行真正的拦截操作。应用之间数据共享采用ContentProvider方式。
四、APP端修改
4.1 调用接口如图:
@Override protected void onResume() { super.onResume(); Settings.Global.putInt(getContentResolver(), "home_keypad", 1); }
@Override protected void onPause() { super.onPause(); Settings.Global.putInt(getContentResolver(), "home_keypad", 0); }
4.2 参数说明:
4.2.1 getContentResolver() 获取实例;4.2.2 home_keypad Global数据库的列,如果没有这个列将会添加;
4.2.3 0 or 1 判断开启Home键屏蔽flag标志位;
五、Framework层修改
修改路径:
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
frameworks/base/core/java/android/provider/Settings.java
5.1 添加Settings.Global.HOME_KEYPAD常量值,表示数据库中的列
public static final String HOME_KEYPAD = "home_keypad";
5.2 添加全局变量
int mHomeKeypadShield;
在PhoneWindowManager.java里面的SettingsObserver进行注册一下,我们可以看到它继承了ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化时做一些相应的处理。(PS: ...代表中间省略了代码)
class SettingsObserver extends ContentObserver { SettingsObserver(Handler handler) { super(handler); } void observe() { ... resolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.HOME_KEYPAD), false, this, UserHandle.USER_ALL); updateSettings();}}
public void updateSettings() { ContentResolver resolver = mContext.getContentResolver(); boolean updateRotation = false; synchronized (mLock) { mHomeKeypadShield = Settings.Global.getIntForUser(resolver, Settings.Global.HOME_KEYPAD, 0, UserHandle.USER_CURRENT); ...}}这个函数也就是SettingsObserver最后一行调用的,思路一看就明白。
5.5 按键必须走的函数,不管是Back键还是应用切换键。顾名思义interceptKeyBeforeDispatching拦截按键之前分发。当return -1的时候说明按键事件已经处理完毕,所以我们在APP开始启动时将数据库的值写为1,监听数据库的值为1的时候就return 0出去,代表按键不做处理。APP端退出的时候又写为0,不影响整个Home按键操作。
public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {...if (keyCode == KeyEvent.KEYCODE_HOME) { if (1 == mHomeKeypadShield) { return 0; } ... return -1;} ...}
1 0
- Android 屏蔽 Home 按键
- Android屏蔽Home按键
- Android 按键屏蔽, Back, Home....
- android 4.0以上屏蔽HOME按键
- 屏蔽HOME按键 ?
- 屏蔽Home按键
- android屏蔽返回键,home键以及其他实体按键
- Android 屏蔽返回键,home键以及其他实体按键
- android屏蔽返回键,home键以及其他实体按键
- android屏蔽返回键,home键以及其他实体按键
- Android Home按键的监听与屏蔽方式
- 如何在Android App中屏蔽(拦截)Home按键及其他按键
- 如何在Android App中屏蔽(拦截)Home按键及其他按键
- 如何在Android App中屏蔽(拦截)Home按键及其他按键
- Android App中屏蔽(拦截)Home按键及其他按键
- Android HOME键屏蔽
- Android 屏蔽HOME键
- Android屏蔽home键
- View隐藏
- 用一般函数设计点类求两点之间的距离
- 经典抓取网络数据方法效率分析(fsockopen/curl/file_get_contents)
- 【C++】迭代器的失效
- Dagger2----一个最简单的Dagger2依赖的实现
- Android屏蔽Home按键
- C#多线程——多线程访问共同的代码或者对象
- 13.2 stdio库的缓冲
- Ubuntu亮度调节问题(转)
- Money
- Android6.0状态栏图标原生反色操作
- hdoj-1421-搬寝室
- BZOJ 1059 矩阵游戏 (二分图最大匹配) (匈牙利算法)
- 设计模式:策略模式(Strategy)