zoukankan      html  css  js  c++  java
  • Android随笔之——模拟按键操作的几种方式

      前几天转过一篇Android上模拟按键操作、触屏事件的博客,昨天又去找了百度、谷歌了一下,写了一点简单的测试代码,留待不时之需。有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵),这里我就直接上代码了。

      

     1 package com.lsj.keyboardsample;
     2 
     3 import android.app.Activity;
     4 import android.app.Instrumentation;
     5 import android.os.Bundle;
     6 import android.view.KeyEvent;
     7 
     8 public class MainActivity extends Activity {
     9 
    10     @Override
    11     protected void onCreate(Bundle savedInstanceState) {
    12         super.onCreate(savedInstanceState);
    13         setContentView(R.layout.activity_main);
    14         // sendKeyCode1(KeyEvent.KEYCODE_MEDIA_STOP);
    15         sendKeyCode2(KeyEvent.KEYCODE_VOLUME_DOWN);
    16     }
    17 
    18     /**
    19      * 用Runtime模拟按键操作
    20      * 
    21      * @param keyCode
    22      *            按键事件(KeyEvent)的按键值
    23      */
    24     private void sendKeyCode1(int keyCode) {
    25         try {
    26             // 按键操作命令 11.24勘误,之前错误的写成了"input keycode"
    27             String keyCommand = "input keycode " + keyCode;
    28             // 调用Runtime模拟按键操作
    29             Runtime.getRuntime().exec(keyCommand);
    30         } catch (Exception e) {
    31             e.printStackTrace();
    32         }
    33     }
    34 
    35     /**
    36      * <pre>
    37      * 使用Instrumentation接口:对于非自行编译的安卓系统,无法获取系统签名,只能在前台模拟按键,不能后台模拟
    38      * 注意:调用Instrumentation的sendKeyDownUpSync方法必须另起一个线程,否则无效
    39      * @param keyCode
    40      *            按键事件(KeyEvent)的按键值
    41      * </pre>
    42      */
    43     private void sendKeyCode2(final int keyCode) {
    44         new Thread(new Runnable() {
    45             @Override
    46             public void run() {
    47                 try {
    48                     // 创建一个Instrumentation对象
    49                     Instrumentation inst = new Instrumentation();
    50                     // 调用inst对象的按键模拟方法
    51                     inst.sendKeyDownUpSync(keyCode);
    52                 } catch (Exception e) {
    53                     e.printStackTrace();
    54                 }
    55             }
    56         }).start();
    57     }
    58     
    59     /**
    60      * <pre>
    61      * 此方法使用反射调用系统IWindowManager隐藏API:兼容性较差,稳定性不好,容易出错。另外实际编译时发生错误,原因暂时不明。
    62      * 暂时还未掌握Java的反射机制,留待以后测试
    63      * @param keyCode
    64      * </pre>
    65      */
    66     private void sendKeyCode3(int keyCode) {
    67         /*此方法中那个的IWindowManager是不存在的,需要使用Java的反射机制才能实现*/
    68         /**
    69         final int keyCode = key;
    70         Thread sendKeyDelay = new Thread(){
    71             public void run() {
    72                 try {
    73                     Thread.sleep(100);
    74                     
    75                     long now = SystemClock.uptimeMillis();
    76                     KeyEvent keyDown = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
    77                             keyCode, 0);
    78                     IWindowManager wm = IWindowManager.Stub.asInterface(
    79                             ServiceManager.getService("window"));
    80                     wm.injectKeyEvent(keyDown, false);
    81                     
    82                     KeyEvent keyUp = new KeyEvent(now, now, KeyEvent.ACTION_UP,
    83                             keyCode, 0);
    84                     wm.injectKeyEvent(keyUp, false);
    85                 } catch (InterruptedException e) {
    86                     e.printStackTrace();
    87                 } catch (RemoteException e) {
    88                     e.printStackTrace();
    89                 }
    90             }
    91         };
    92         sendKeyDelay.start();
    93          */
    94     }
    95 
    96 }

    作者:登天路

    转载请说明出处:http://www.cnblogs.com/travellife/

  • 相关阅读:
    哈夫曼树及哈夫曼编码
    01背包问题
    Java IO
    Java对象的复制三种方式
    TCP三次握手和四次挥手
    轻量级Java Web框架的实现原理
    Java并发
    消息队列
    赋值、浅拷贝、深拷贝
    Python文件操作(txtxlsxcsv)及os操作
  • 原文地址:https://www.cnblogs.com/travellife/p/4107434.html
Copyright © 2011-2022 走看看