关闭

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

标签: 在App层实现虚拟按键消息发送
1023人阅读 评论(0) 收藏 举报
分类:
继续上一篇文章的结果,做个测试程序。实现点击虚拟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是不开放的。因此只能在源码环境下引用,或者其它方式如果也能引用的话那更好,比如反射。我是在源码环境下实现的。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:826125次
    • 积分:6934
    • 等级:
    • 排名:第3288名
    • 原创:53篇
    • 转载:186篇
    • 译文:1篇
    • 评论:85条
    最新评论