在App层实现虚拟按键消息发送

转载 2013年12月06日 11:52:29
继续上一篇文章的结果,做个测试程序。实现点击虚拟power键进入睡眠状态的功能。

为了简单直接用一个Button,点击Button,发送一个Power键的按键消息。且为短按。

实现的关键源码如下:

  1. import android.os.RemoteException;
  2. import android.os.SystemClock;
  3. import android.view.InputDevice;
  4. import android.view.KeyCharacterMap;
  5. import android.view.KeyEvent;
  6. import android.view.IWindowManager;
  1. public void onClick(View v) {
  2. long mDownTime = SystemClock.uptimeMillis();
  3. long when = mDownTime;
  4. final KeyEvent ev = new KeyEvent(mDownTime, when, KeyEvent.ACTION_UP, 26, 0,
  5. 0, -1, 0, KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY, InputDevice.SOURCE_KEYBOARD);
  6. IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
  7. ServiceManager.getService(Context.WINDOW_SERVICE));
  8. try {
  9. mWindowManager.injectInputEventNoWait(ev);
  10. } catch (RemoteException ex) {
  11. }

按下Button的效果和短按Power键效果一样,会使机子进入睡眠状态。这也解决了 goToSleep()这个接口函数因为权限问题无法在App层调用的问题。其实就是发送了一个power键的键值消息,插入按键消息队列。这样收到这个按键消息的函数自动会处理响应这个按键。

注意:由于需要用到WindowManagerService.java中的接口函数,而该类是hide类型,即对SDK是不开放的。因此只能在源码环境下引用,或者其它方式如果也能引用的话那更好,比如反射。我是在源码环境下实现的。

android底层去掉虚拟按键

 找到framework/base/core/res/res/values/dimens.xml,在其中把Navigation的配置改成0         0dp        ...
  • huanghai381
  • huanghai381
  • 2016年06月15日 18:41
  • 2577

Android底部虚拟按键遮挡应用

问题: 应用底部黑色部分被虚拟按键挡住了
  • baidu_32237719
  • baidu_32237719
  • 2016年12月28日 17:42
  • 2080

虚拟按键遮挡app页面,如华为荣耀7i

最近开发遇到一个问题,app首页底部的一部分,被手机的虚拟按键遮挡住了,导致内容显示不全,之后各种搜索,记录如下. ①: 我用到了slidingmenu控件加载,而slidingmenu在版本比较高的...
  • qq_31733073
  • qq_31733073
  • 2016年03月25日 17:07
  • 5453

安卓类似华为手机适配底部虚拟按键的解决方案

场景1:华为手机遮挡了屏幕底部。 场景2:进入应用时,虚拟键自动缩回,留下空白区域。 需求: 需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占满整个屏幕,当用户启用虚拟键...
  • Me_Dong
  • Me_Dong
  • 2016年12月16日 10:11
  • 14519

关于手机虚拟按键遮挡布局问题解决讨论

最近拿到同事项目,没怎么看代码,想着先运行出来看看再说,结果在测试机上虚拟按键正好遮挡住首页的底部菜单TabHost(说明下:我的测试机是华为荣耀4A,一直就觉得华为挺另类,看来开发者有台华为测试机是...
  • kuixiaoba
  • kuixiaoba
  • 2016年05月04日 15:55
  • 8253

SystemUi->虚拟按键

在SystemUi中的PhoneStatusBar中的makeStatusBarView()方法中有如下代码 try { boolean showNav = mW...
  • liu149339750
  • liu149339750
  • 2016年02月29日 18:46
  • 1081

Android 7.0 虚拟按键(NavigationBar)源码分析 之 点击事件的实现流程

棒棒哒,已经到第二篇咯,哈哈。 Let's go!!! 【二、点击效果的实现流程】 1、     虚拟按键点击效果的实现和实体按键相似,也是通过上报一个keyCode值,来判断哪个按钮被点击。不...
  • kuaiguixs
  • kuaiguixs
  • 2017年10月24日 16:19
  • 1029

android虚拟按键挤压布局和硬件加速

在 别挤压的activity中的清单文件中配置 属性 android:windowSoftInputMode="adjustPan" 在 android studio中默认是开启硬...
  • u013245095
  • u013245095
  • 2016年06月07日 16:03
  • 710

【Anroid界面实现】WindowManager类使用详解——用户首次打开APP的使用教学蒙板效果实现

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在上一篇的文章中,我们介绍了如何实现桌面悬浮窗口,在这个效果的实现过程中,最重要的一个类就是Wind...
  • bz419927089
  • bz419927089
  • 2014年10月24日 11:54
  • 6332

Android虚拟键遮挡控件

随着手机行业的快速发展,越来越多的手机产商在追求极致的过程中,逐渐用虚拟按键代替了物理按键。 在带有虚拟键的机子测试时,就会发现有些UI控件完全被底部的虚拟按键挡住了(虽然可以隐藏虚拟按键,可还是影...
  • Peak1Chen
  • Peak1Chen
  • 2016年03月10日 16:11
  • 2446
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在App层实现虚拟按键消息发送
举报原因:
原因补充:

(最多只允许输入30个字)