PhoneWindowManager
极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能
在Android
中会有以下5
个按键(Back
、Home
、Menu
、Power
、Volume
)与用户进行交互,Framework
层中实现按键功能,因此,从手机系统定制的角度,可以满足客户的客制化要求。本文主要从Framework
层浅析这些客制化需求的实现。
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
- Android 按键修改相关的类
- PhoneWindowManager 简介
- 如何打开 或者 关闭 Navigation Bar
- 如何长按Home 键启动Google Now
- 如何长按实体Menu键进入多窗口模式
- 如何点击 Menu键进入调出最近任务列表
- 如何让App拿到Power key 值
- 如何修Activity启动是的窗口(app启动白屏,黑屏问题)
- WindowManagerPolicy 简介
1. Android 按键修改相关的类
以MTK
平台为例,按键客制化的代码主要存放在以下类中
- PhoneWindowManager
PhoneWindowManager
代码路径如下:
\alps\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java
- WindowManagerPolicy
PhoneWindowManager
实现 的接口类WindowManagerPolicy
代码路径如下:
alps\frameworks\base\core\java\android\view\WindowManagerPolicy.java
2. PhoneWindowManager 简介
PhoneWindowManager
类实现接口如下:
java.lang.Object↳ android.view.WindowManagerPolicy.java↳ com.android.server.policy.PhoneWindowManager.java
PhoneWindowManager
主要用于实现各种实体或虚拟按键处理,如需特殊处理按键,请修改源码。
3. 如何打开 或者 关闭 Navigation Bar
解决方法:
1. 修改config.xml 文件中
搜索关键字config_showNavigationBar
, 查看 config_showNavigationBar
值
true
表示显示,false
表示不显示
<!-- Whether a software navigation bar should be shown. NOTE: in the future this may beautodetected from the Configuration. --><bool name="config_showNavigationBar">true</bool>
参考路径如下:
alps\frameworks\base\core\res\res\values\config.xml
2. 修改 system.prop 文件
查询关键字 qemu.hw.mainkeys
,并查看值,1
表示关闭0
.表示开启 。
# temporary enables NAV bar (soft keys)
qemu.hw.mainkeys=1
不同项目文件存放地址不一样,可以使用以下命令查找
终端下查找文件方法
find 路径 -name "文件名.java"
或者直接查找文件中的字符串
find 路径 -type f -name "文件名" | xargs grep "文件中的字符串"
3. 修改PhoneWindowManager代码
如果上面两个修改都不生效(搜索关键字config_showNavigationBar
、qemu.hw.mainkeys
),请在PhoneWindowManager
查看setInitialDisplaySize
方法中mHasNavigationBar
的值是否被写死,true
表示会显示、false
表示不显示导航栏。
4. 如何长按Home 键启动Google Now
1. 预制 Google Now APK
请自行安装APK
2. 修改 PhoneWindowManager 代码
长按Home
键启动Google Now
,实现方法参考launchAssistLongPressAction
功能实现。
自己实现常按Home
键吊起Google Now
方法,供在按键分发处理事件时候调用。
3. 在按键事件分发之前处理
在按键分发处理之前调用自定义长按Home
键的方法
1.双击Home 键调出最近任务列表请用以下方法
在phoneWindowManager.java
的interceptKeyBeforeQueueing
方法中修改
修改方法如下:
5. 如何长按实体Menu键进入多窗口模式
Android N
上支持Multi-Window
,通过recent key
进入多窗口,对于没有打开虚拟导航栏,只有实体menu
按键的手机,可以考虑向SystemUI
发送广播的形式,进入Android
分屏多任务模式。
解决方案如下:
1. PhoneStatusBar 里注册广播
PhoneStatusBar
是SystemUI
模块的代码,参考路径如下:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
自定义广播实现可以参考系统mDemoReceiver
的实现方法
动态注册广播方法如下:
自定义接收广播后,onReceive
处理事件实现分屏方法如下:
2. PhoneWindowManager 中发送广播
在 PhoneWindowManager
的interceptKeyBeforeDispatching
方法中发送广播
- Destory 方法注销广播
再Destory
方法中记得一定要注销广播
mContext.unregisterReceiver(mDemoReceiver);mContext.unregisterReceiver(mAppLongSwitchReceiver);
6. 如何点击 Menu键进入调出最近任务列表
如果想调出最近任务列表,需要拦截menu
的事件,在PhoneWindowManager
的interceptKeyBeforeDispatching 中
处理即可
如果想长按Menu
调出可以使用以下方法
7. 如何让 App 拿到Power key 值
一般情况下App
是拿不到Power
的Key
值,但通过以下方法可以实现。
1. 修改PhoneWindowManager 文件实现
在PhoneWindowManager
中修改interceptKeyBeforeQueueing
方法实现让特定的APP
拿到Power key
值
2. 如果只想让某个app的某个Activity 处理
8. 如何修Activity启动是的窗口(app启动白屏,黑屏问题)
当用户从主菜单进入其他应用程序例如时钟、联系人、文件管理等时,可能会出现屏幕闪一下黑屏、白屏等问题,这种现象在当前手机主题(Theme)
是浅色(例如白色)的情况下比较明显。
此所谓的闪"黑屏",其实是应用程序的启动窗口。
启动窗口出现的条件如下:
仅在要启动的
Activity
在新的Task
或者新的Process
时,才可能显示启动窗口启动窗口先于
Activity
窗口显示,当Activity
窗口的内容准备好之后,启动窗口就会被移除掉,show
出真正的activity
窗口启动窗口和普通的
Activity window
类似,只是没有画任何内容,默认是一个黑色背景的窗口
正是由于启动窗口默认是黑色背景的,所以在当前的手机主题为浅色调的时候,就比较容易因为颜色的深浅对比而产生一种视觉上的闪动感。
解决方法如下:
1.去掉启动窗口
在 ActivityStack.java
中将SHOW_APP_STARTING_PREVIEW
设置为false
既可
2. 修改启动窗口样式
在 PhoneWindowManager
中的addStartingWindow
方法中添加自定义样式或者背景等
# 9. WindowManagerPolicy 简介
PhoneWindowManager 实现 的接口类如下:
alps\frameworks\base\core\java\android\view\WindowManagerPolicy.java
WindowManagerPolicy 是一个接口类,主要对外提供一些接口。
常用接口如下:
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
转载于:https://www.cnblogs.com/wangjie1990/p/11327411.html
PhoneWindowManager相关推荐
- PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源
这个值的来源是powerManager设置的.对应于PowerManagerService.java的mWakeFulness的WAKEFULLNESS_AWAKE和WAKEFULLNESS_DREA ...
- 2021-11-12 Android 11 长按按键进入恢复出厂设置的实现方法-PhoneWindowManager里面用发广播的模式
一.kernel部分主要发按键信息到android上层. diff --git a/kernel/drivers/misc/key/reset_key.c b/kernel-4.14/drivers/ ...
- Android 9.0系统源码_SystemUI(九)PhoneWindowManager构建状态栏和导航栏视图窗口区域坐标的流程解析
前言 NavigationBar 和 StatusBar 都属于 SystemBar,也叫做 decor,就是说给 App 装饰的意思.一般的 window 的布局是在 PhoneWindowMana ...
- Android Input子系统 - PhoneWindowManager
基本概念 PhoneWindowManager也是运行于systemserver线程中,在Event事件分发之前处理,比如电源键.Event事件分发后,仅有包含Activity的apk线程才可以处理, ...
- Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8570428 通过前面几篇文章的学习,我们知道了 ...
- Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析
在Android系统中,Activity窗口的大小是由WindowManagerService服务来计算的.WindowManagerService服务会根据屏幕及其装饰区的大小来决定Activity ...
- android锁屏流程_Android开机锁屏流程分析
Android开机锁屏流程: 首先:手机开机时,在SystemServer类的init2()方法中会启动线程类ServerThread的run方法如下: WindowMan Android开机锁屏流程 ...
- 深入解析Android关机
轉載: http://mobile.51cto.com/aprogram-418981.htm 其他參考: 设备驱动-----Android关机流程总结 下图详细阐释了Android的关机顺序. 第一 ...
- WindowManagerPolicy的后缀 解释
转自:http://blog.csdn.net/hunanwy/article/details/8563090 Ti,called from the input thread. Input threa ...
最新文章
- 难以想象!未来十年,颠覆性技术将带来这些社会变革……
- phantomjs 抓取html,javascript – 如何使用PhantomJS获取网站的HTML源代码
- Django----缓存
- 信息系统项目管理师-组织级项目管理与大型项目管理知识点
- linux下c语言抓包库libpcap
- ActiveReports报表控件教程之单元格合并
- ue 清理缓存_【PM项目管理系统】PM安装更新客户端、删除UE及清理IE缓存操作手册...
- window 系统上传文件到linux 系统出现dos 格式换行符
- JS动画 | 用TweenMax实现收集水滴效果
- 自定义queue - linked array
- 一三五、服务器部署Node项目、Vue spa静态项目、ssr项目
- 虚拟机安装win10(ghost镜像)
- postman设置成中文
- 宋朝五子登科家族金榜进士涂大任后裔在松滋
- 电脑技巧:Win7、Win10、Win11如何选择,看完你就懂了
- 名帖47 钟繇 小楷《宣示表》
- 论文的开题报告是什么样的?
- 台服天堂2更新服务器无响应,天堂2台服被限制怎么回事?该怎么解决?
- stm32移植lvgl
- 神武3服务器神武币交易中心,《神武3》电脑版:神武币使用方向攻略,神武币如何花在刀刃上...
热门文章
- matlab矩阵处理实验二,实验二 MATLAB矩阵分析和处理
- 用c语言设计八路抢答器的犯规程序,求大神改八路抢答器程序
- 深度学习——CNN(卷积神经网络)(超详细)
- dfgdfgadfadfgasga
- 【Python游戏】Python实现一个可以切换单人或双人对战乒乓球小游戏 | 附带源码
- 适合蛋糕店的会员管理系统
- CentOS下如何用SMplayer播放WMV格式文件
- 基于cloudera搭建大数据集群(docker)记录
- 为什么要制定和采用计算机图形标准,计算机图形考学试简答题2含答案.doc
- 求一个数的相反数的补码