android模拟按键方法,Android随笔之——模拟按键操作的几种方式

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

package com.lsj.keyboardsample;

import android.app.Activity;

import android.app.Instrumentation;

import android.os.Bundle;

import android.view.KeyEvent;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// sendKeyCode1(KeyEvent.KEYCODE_MEDIA_STOP);

sendKeyCode2(KeyEvent.KEYCODE_VOLUME_DOWN);

}

/**

* 用Runtime模拟按键操作

*

* @param keyCode

* 按键事件(KeyEvent)的按键值

*/

private void sendKeyCode1(int keyCode) {

try {

// 按键操作命令 11.24勘误,之前错误的写成了"input keycode"

String keyCommand = "input keycode " + keyCode;

// 调用Runtime模拟按键操作

Runtime.getRuntime().exec(keyCommand);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

*

 
   

* 使用Instrumentation接口:对于非自行编译的安卓系统,无法获取系统签名,只能在前台模拟按键,不能后台模拟

* 注意:调用Instrumentation的sendKeyDownUpSync方法必须另起一个线程,否则无效

* @param keyCode

* 按键事件(KeyEvent)的按键值

*

*/

private void sendKeyCode2(final int keyCode) {

new Thread(new Runnable() {

@Override

public void run() {

try {

// 创建一个Instrumentation对象

Instrumentation inst = new Instrumentation();

// 调用inst对象的按键模拟方法

inst.sendKeyDownUpSync(keyCode);

} catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

/**

*

 
   

* 此方法使用反射调用系统IWindowManager隐藏API:兼容性较差,稳定性不好,容易出错。另外实际编译时发生错误,原因暂时不明。

* 暂时还未掌握Java的反射机制,留待以后测试

* @param keyCode

*

*/

private void sendKeyCode3(int keyCode) {

/*此方法中那个的IWindowManager是不存在的,需要使用Java的反射机制才能实现*/

/**

final int keyCode = key;

Thread sendKeyDelay = new Thread(){

public void run() {

try {

Thread.sleep(100);

long now = SystemClock.uptimeMillis();

KeyEvent keyDown = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,

keyCode, 0);

IWindowManager wm = IWindowManager.Stub.asInterface(

ServiceManager.getService("window"));

wm.injectKeyEvent(keyDown, false);

KeyEvent keyUp = new KeyEvent(now, now, KeyEvent.ACTION_UP,

keyCode, 0);

wm.injectKeyEvent(keyUp, false);

} catch (InterruptedException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

}

}

};

sendKeyDelay.start();

*/

}

}

作者:登天路

C#获取窗口,模拟按键操作

C#获取窗口,模拟按键操作,实现计算器模拟操作.首先引用. using System.Runtime.InteropServices; 使用DllImport引入两个函数: // Get a hand ...

C#驱动级模拟按键操作

C#驱动级模拟按键操作 2013-09-26 03:17 ·AB叔 447 3 

Android 命令行模拟按键

/***************************************************************************** * Android 命令行模拟按键 * 说 ...

IOS文件操作的两种方式:NSFileManager操作和流操作

1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

怎样在Android开发中FPS游戏实现的两种方式比较

怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

[Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

[Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

Android中H5和Native交互的两种方式

Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...

Android Service与Activity之间通信的几种方式

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ ...

随机推荐

jquery 键盘回车事件

【Hibernate 9】悲观锁和乐观锁

一.锁的基本简介 1.1,为什么需要锁 首先,锁的概念产生,主要是为了解决并发性的问题.什么是并发性问题呢,比如: Angel现在银行有个账号,里面有存款1000块.现在,Angel的账户,在两个地方 ...

Nginx服务器配置之location语法分析

location基本语法:location [=|~|~*|^~] /uri/ { - } = 严格匹配.如果这个查询匹配,那么将停止搜索并立即处理此请求. ~ 为区分大小写匹配(可用正则表达式) ! ...

Struts2获取Session的三种方式

1.Map session =  ActionContext.getContext().getSession(); session.put("cod ...

python3 asyncio-协程模块测试代码

import time import asyncio #统计运行时间的装饰器 def run_time(func): def wrapperfunc(*argv, **kwargv): now = l ...

c++多继承多态

C++多继承多态的实现 如果一个类中存在虚函数,在声明类的对象时,编译器就会给该对象生成一个虚函数指针,该虚函数指针指向该类对应的虚函数表. 多态的实现是因为使用了一种动态绑定的机制,在编译期间不确定 ...

01-JavaScript介绍

JavaScript价绍 1.引言 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) ...

HDU 4135 Co-prime (容斥+分解质因子)

题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...

一般图的着色 - [Welch Powell法][贪心]

原本这是离散数学的期末作业,因为对图论比较熟悉,就先看了一下图论题: 引用(其实就是我们的离散数学课本……): 用韦尔奇·鲍威尔法对图G进行着色,其方法是: a)将 ...

elasticsearch安装指导(new)

1 直接去官网下载rpm包安装或者下载tar包 2 服务启动后,发现打不开页面,修改yml文件即可 用rpm包安装的软件有一个特点就是不同的目录在不同文件夹,比如config文件夹根据下面进程信息查到 ...

你可能感兴趣的:(android模拟按键方法)