Android 设备按键处理

阅读5分钟,每日十点、和您一起终身学习,这里是程序员Android

本篇文章主要介绍 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、Android 按键修改

二、PhoneWindowManager 简介

三、如何打开 或者 关闭 Navigation Bar

四、如何长按Home 键启动Google Now

五、如何长按实体Menu键进入多窗口模式

六、如何点击 Menu键进入调出最近任务列表

七、如何让 App 拿到Power key 值

八、如何修Activity启动背景窗口

九、WindowManagerPolicy 简介

一、Android 按键修改

在 中会有以下个按键、、、、)与用户进行交互,层中实现按键功能,因此,从手机系统定制的角度,可以满足客户的客制化要求。本文主要从层浅析这些客制化需求的实现。

Back、Home、Menu、Power、Volume 按键图

以平台为例,按键客制化的代码主要存放在以下类中

1.PhoneWindowManager

代码路径如下:

二、 PhoneWindowManager 简介

类实现接口如下:

PhoneWindowManager 类实现关系

主要用于实现各种实体或虚拟按键处理,如需特殊处理按键,请修改源码。

三、 如何打开 或者 关闭 Navigation Bar

虚拟导航栏

如何打开 或者 关闭 Navigation Bar 的解决方法如下:

1. 修改config.xml 文件中

搜索关键字, 查看 值

表示显示, 表示不显示

参考路径如下:

2. 修改 system.prop 文件

查询关键字 ,并查看值,表示关闭.表示开启 。

不同项目文件存放地址不一样,可以使用以下命令查找

终端下查找文件方法

或者直接查找文件中的字符串

3. 修改PhoneWindowManager代码

如果上面两个修改都不生效(搜索关键字、),请在 查看方法中 的值是否被写死,表示会显示、表示不显示导航栏。

底部导航卡显示代码控制

四、 如何长按Home 键启动Google Now

1. 预制

请自行安装

2. 修改 PhoneWindowManager 代码

长按键启动,实现方法参考 功能实现。

PhoneWindowManager 长按Home 建启动Google Now

自己实现常按 键吊起方法,供在按键分发处理事件时候调用。

自己实现常按Home 键吊起Google Now 方法

3. 在按键事件分发之前处理

在按键分发处理之前调用自定义长按键的方法

自定义长按Home 键的方法

4.双击Home 键调出最近任务列表请用以下方法

在 的 方法中修改

修改方法如下:

双击Home 键调出最近任务列表

五、 如何长按实体Menu键进入多窗口模式

上支持,通过进入多窗口,对于没有打开虚拟导航栏,只有实体按键的手机,可以考虑向发送广播的形式,进入 分屏多任务模式。

解决方案如下:

1. PhoneStatusBar 里注册广播

是模块的代码,参考路径如下:

自定义广播实现可以参考系统 的实现方法

动态注册广播方法如下:

自定义广播注册

自定义接收广播后,处理事件实现分屏方法如下:

自定义接收广播处理

2. PhoneWindowManager 中发送广播

在 的方法中发送广播

interceptKeyBeforeDispatching 发送广播

3. Destory 方法注销广播

再方法中记得一定要注销广播

六、 如何点击 Menu键进入调出最近任务列表

如果想调出最近任务列表,需要拦截的事件,在的处理即可

menu 键调出最近任务列表

如果想调出可以使用以下方法

长按menu 键调出任务列表

七、 如何让 App 拿到Power key 值

一般情况下是拿不到的值,但通过以下方法可以实现。

1. 修改PhoneWindowManager 文件实现

在 中修改方法实现让特定的拿到 值

power key 启动App

2. 如果只想让某个app的某个Activity 处理

Power 键启动Activity 的方法

八、 如何修Activity启动是的窗口(app启动白屏,黑屏问题)

当用户从主菜单进入其他应用程序例如时钟、联系人、文件管理等时,可能会出现屏幕闪一下黑屏、白屏等问题,这种现象在当前手机主题是浅色(例如白色)的情况下比较明显。

此所谓的闪"黑屏",其实是应用程序的启动窗口。

启动窗口出现的条件如下:

仅在要启动的在新的或者新的时,才可能显示启动窗口

启动窗口先于窗口显示,当窗口的内容准备好之后,启动窗口就会被移除掉,出真正的 窗口

启动窗口和普通的类似,只是没有画任何内容,默认是一个黑色背景的窗口

正是由于启动窗口默认是黑色背景的,所以在当前的手机主题为浅色调的时候,就比较容易因为颜色的深浅对比而产生一种视觉上的闪动感。

解决方法如下:

1.去掉启动窗口

在 中将设置为既可

2. 修改启动窗口样式

在 中的方法中添加自定义样式或者背景等

修改启动窗口样式

九、 WindowManagerPolicy 简介

PhoneWindowManager 实现 的接口类如下:

WindowManagerPolicy 接口实现

WindowManagerPolicy 是一个接口类,主要对外提供一些接口。

常用接口如下:

WindowState 接口

WindowMangerFuncs接口

Screen On 接口

Keyguard 接口

友情推荐

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

分享到朋友圈吧,方便您使用时快速查找!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191111A0BOSO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券