安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
/**
* 用root权限执行Linux下的Shell指令
*
* @author jzj
* @since 2014-09-09
*/
public class RootShellCmd { private OutputStream os; /**
* 执行shell指令
*
* @param cmd
* 指令
*/
public final void exec(String cmd) {
try {
if (os == null) {
os = Runtime.getRuntime().exec("su").getOutputStream();
}
os.write(cmd.getBytes());
os.flush();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 后台模拟全局按键
*
* @param keyCode
* 键值
*/
public final void simulateKey(int keyCode) {
exec("input keyevent " + keyCode + "\n");
}
}
通过Runtime实现,代码如下:
- try
- {
- String keyCommand = "input keyevent " + KeyEvent.KEYCODE_MENU;
- Runtime runtime = Runtime.getRuntime();
- Process proc = runtime.exec(keyCommand);
- }
- catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
这个代码是模拟菜单键,模拟其它按键只需将KeyEvent.KEYCODE_MENU替换成其它键值。
缺点:反应速度较慢
以下附带各KeyCode值:
- KEYCODE_UNKNOWN=0;
- KEYCODE_SOFT_LEFT=1;
- KEYCODE_SOFT_RIGHT=2;
- KEYCODE_HOME=3;
- KEYCODE_BACK=4;
- KEYCODE_CALL=5;
- KEYCODE_ENDCALL=6;
- KEYCODE_0=7;
- KEYCODE_1=8;
- KEYCODE_2=9;
- KEYCODE_3=10;
- KEYCODE_4=11;
- KEYCODE_5=12;
- KEYCODE_6=13;
- KEYCODE_7=14;
- KEYCODE_8=15;
- KEYCODE_9=16;
- KEYCODE_STAR=17;
- KEYCODE_POUND=18;
- KEYCODE_DPAD_UP=19;
- KEYCODE_DPAD_DOWN=20;
- KEYCODE_DPAD_LEFT=21;
- KEYCODE_DPAD_RIGHT=22;
- KEYCODE_DPAD_CENTER=23;
- KEYCODE_VOLUME_UP=24;
- KEYCODE_VOLUME_DOWN=25;
- KEYCODE_POWER=26;
- KEYCODE_CAMERA=27;
- KEYCODE_CLEAR=28;
- KEYCODE_A=29;
- KEYCODE_B=30;
- KEYCODE_C=31;
- KEYCODE_D=32;
- KEYCODE_E=33;
- KEYCODE_F=34;
- KEYCODE_G=35;
- KEYCODE_H=36;
- KEYCODE_I=37;
- KEYCODE_J=38;
- KEYCODE_K=39;
- KEYCODE_L=40;
- KEYCODE_M=41;
- KEYCODE_N=42;
- KEYCODE_O=43;
- KEYCODE_P=44;
- KEYCODE_Q=45;
- KEYCODE_R=46;
- KEYCODE_S=47;
- KEYCODE_T=48;
- KEYCODE_U=49;
- KEYCODE_V=50;
- KEYCODE_W=51;
- KEYCODE_X=52;
- KEYCODE_Y=53;
- KEYCODE_Z=54;
- KEYCODE_COMMA=55;
- KEYCODE_PERIOD=56;
- KEYCODE_ALT_LEFT=57;
- KEYCODE_ALT_RIGHT=58;
- KEYCODE_SHIFT_LEFT=59;
- KEYCODE_SHIFT_RIGHT=60;
- KEYCODE_TAB=61;
- KEYCODE_SPACE=62;
- KEYCODE_SYM=63;
- KEYCODE_EXPLORER=64;
- KEYCODE_ENVELOPE=65;
- KEYCODE_ENTER=66;
- KEYCODE_DEL=67;
- KEYCODE_GRAVE=68;
- KEYCODE_MINUS=69;
- KEYCODE_EQUALS=70;
- KEYCODE_LEFT_BRACKET=71;
- KEYCODE_RIGHT_BRACKET=72;
- KEYCODE_BACKSLASH=73;
- KEYCODE_SEMICOLON=74;
- KEYCODE_APOSTROPHE=75;
- KEYCODE_SLASH=76;
- KEYCODE_AT=77;
- KEYCODE_NUM=78;
- KEYCODE_HEADSETHOOK=79;
- KEYCODE_FOCUS=80;//*Camera*focus
- KEYCODE_PLUS=81;
- KEYCODE_MENU=82;
- KEYCODE_NOTIFICATION=83;
- KEYCODE_SEARCH=84;
- KEYCODE_MEDIA_PLAY_PAUSE=85;
- KEYCODE_MEDIA_STOP=86;
- KEYCODE_MEDIA_NEXT=87;
- KEYCODE_MEDIA_PREVIOUS=88;
- KEYCODE_MEDIA_REWIND=89;
- KEYCODE_MEDIA_FAST_FORWARD=90;
- KEYCODE_MUTE=91;
安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)的更多相关文章
- 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...
- Delphi编写的Android程序获取Root权限实现(2015.4.15更新,支持Android 4.4)
借助谷歌,并经过本大侠施展坑.蒙.拐.骗.偷五大绝技,终于成功实现在Delphi下获取Root权限并将其扩展为一个完整功能更加完整的TQAndroidShell记录,在华为荣耀2(Android 4. ...
- Blender模拟全局照明的简单方法
https://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Faked_Gi_with_Blender_internal模拟全局照明最简单的方法是在我们 ...
- 使用fakeroot模拟root权限执行程序(转)
Hack #57: 使用fakeroot模拟root权限执行程序 fakeroot是什么 例如Debian在生成package的时候,编译完之后,不能立刻在当前环境执行make install,需要执 ...
- 安卓学习笔记--已root设备应用请求root权限
网上查到的方法 Process process = null; DataOutputStream os = null; try { String cmd = "chmod 777 " ...
- Android权限说明 system权限 root权限
原文链接:http://blog.csdn.net/rockwupj/article/details/8618655 Android权限说明 Android系统是运行在Linux内核上的,Androi ...
- Stick hero "攻略", android 代码编写与分析(后台截屏, 后台模拟点击)
论文写完,感觉头脑好久没被灵感刺激了,前些天室友介绍了个小游戏,我突然来了灵感可以写的简单的android 程序实现自动运行.主要的过会为三步: 1,Android 屏幕的获取.因为安全的原因,过程比 ...
- [Android Pro] Android fastboot刷机和获取Root权限
参考文章: https://developers.google.com/android/nexus/images 转载自: http://www.inexus.co/article-1280-1 ...
- 取之有道——巧用Root权限 启动其他APP中的Activity
这次博主来分享一个很巧妙的办法来启动其他APP中Activity的方法. 首先说一下这样做的目的:最近博主在攻克一个技术难点,就是搞定某些三方系统中,对于应用权限的限制.为此给出用户指导,引导用户启动 ...
随机推荐
- Nagios监控mongodb分片集群服务实战
1,监控插件下载 Mongodb插件下载地址为:git clone git://github.com/mzupan/nagios-plugin-mongodb.git,刚開始本人这里没有安装gitpu ...
- js 浅拷贝和深拷贝
传值与传址 了解了基本数据类型与引用类型的区别之后,我们就应该能明白传值与传址的区别了.在我们进行赋值操作的时候,基本数据类型的赋值(=)是在内存中新开辟一段栈内存,然后再把再将值赋值到新的栈中.例如 ...
- middle源码
CREATE TABLE `middle` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `innserSessionid` VARCHAR(250 ...
- Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)
知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中 ...
- jsp新建项目
1.在原有项目的基础上新建一个文件夹 在文件夹内新建一个jsp文件 取名 JSP容器处理JSP文件需要以下三个阶段:翻译——编译——执行 JSP的页面元素包括 静态内容-HTML静态文本 指令-以“& ...
- Python 和C#的交互
IronPython是一个.NET平台上的Python实现,包括了完整的编译器.执行引擎与运行时支持,能够与.NET已有的库无缝整合到一起. IronPython已经很好的集成到了.NET frame ...
- python concurrent.futures包使用,捕获异常
concurrent.futures的ThreadPoolExecutor类暴露的api很好用,threading模块抹油提供官方的线程池.和另外一个第三方threadpool包相比,这个可以非阻塞的 ...
- [原]unity3D 相机跟随
using UnityEngine;using System.Collections; public class CameraFollow : MonoBehaviour { p ...
- C语言realloc,malloc,calloc的区别【转载】
转载自:http://www.cnblogs.com/BlueTzar/articles/1136549.html 三个函数的申明分别是: void* realloc(void* ptr, unsig ...
- MyBatis 与 Spring 是如何结合在一起工作的——mybatis-spring(version:1.2.2)
在MyBatis-Spring的项目中,我们一般会为MyBatis配置两个配置文件 beans-mybatis.xml 和 mybatis-config.xml.其中 beans-mybatis.xm ...