在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是不开放的。因此只能在源码环境下引用,或者其它方式如果也能引用的话那更好,比如反射。我是在源码环境下实现的。

如何在App中实现IM功能之四创建稳健的消息发送模块——箭扣科技Arrownock

如何在App中实现IM功能 之四 创建稳健的消息发送模块   anIM聊天是以心跳的方式保持设备和服务器之间的在线连接,有时候会因为网络或其他原因导致连接中断,则在该设备登录的用户在服务器端会自动下线...

向任意应用程序(包括后台的)发送任意按键消息

向任意应用程序(包括后台的)发送任意按键消息(包括普通字符键、功能键、Shift/Control/Alt加任意按键的组合键),以实现自动执行特定功能,是一个用途很广、很有实用价值的功能,很多人都受困于...

android发送模拟按键消息,出现死锁,timeout的解决方法

最近在状态栏上面添加了一些系统常用的按键,用的比较多的,Home, Menu, Back三个按键,分别模拟物理按键按下时的消息,参考下面两篇文章,可以实现在状态栏上添加自定义的按键,1.在androi...

VC 向其他程序发送按键消息

【转】VC 向其他程序发送按键消息 VC如何模拟按键并释放? 模拟按键: 利用PostMessage函数发送按键消息. HWND hWnd; hWnd = ::Find...

用zgf实现触屏控制和虚拟按键

  • 2013年05月18日 21:50
  • 147KB
  • 下载

Android Framework层如何截获按键消息

代码位置: frameworks/base/services/input/InputDispatcher.cpp
  • I2Cbus
  • I2Cbus
  • 2014年11月14日 12:44
  • 1955

教程之ucgui_向按钮发送一个按键消息的程序追踪

 把Msg的结构体写在最前面: typedef struct {    int MsgId;             /* type of message */    WM_HWIN ...

键盘监控的实现Ⅲ——按键消息的修改(映射)

在“键盘监控的实现Ⅰ——Keyboard Hook API函数”中,介绍了基本的Key Hook API函数   在“键盘监控的实现Ⅱ——容易产生误解的CallNextHookEx函数”中,提到按键...

键盘监控的实现Ⅲ——按键消息…

本文就是要解决这个问题,如何来实现按键消息的修改。这里我们要引入一个函数   Private Declare Sub keybd_event Lib "user32" (ByVal bvk As By...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在App层实现虚拟按键消息发送
举报原因:
原因补充:

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