安卓使用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的方法. 首先说一下这样做的目的:最近博主在攻克一个技术难点,就是搞定某些三方系统中,对于应用权限的限制.为此给出用户指导,引导用户启动 ...
随机推荐
- hql Hibernate.gethibernatetemplate()
1. find(String hql); //普通查询 示例:this.gethibernateTemplate().find("from User"); 2. find(Str ...
- 原来找字也可以这样用ElseIf FindStr 手机按键精灵 跟大漠的区别
原来找字也可以这样用ElseIf FindStr(646, 1109, 776, 1261, "公告小叉", "FFFFFF-333333", 0.9, in ...
- Ubuntu中的“资源管理器”System Monitor
我们在Windows中经常要查看“资源管理器”来了解系统运行情况,对进程进行操作等等... 在Windows桌面任务栏右键“启动任务管理器”: 学习Linux,自然也希望有类似的“资源管理器”,安装完 ...
- VC++6.0远程调试(亲试成功)
0 前言 VS2008及以上远程调试上篇已经讲过,这里再讲下VC++6.0开发环境下的远程调试能力,仅需下面4步即可,更方便的就接着后面的5-6步. 因为目标程序需要在有采集卡等相关硬件支持下的工控机 ...
- IT管理就这么管
随着信息系统的广泛应用,员工没有电脑就无法工作,企业离开信息系统就无法顺利开展业务.信息部作为企业的内部信息化部门,承担了包括软件开发.系统维 护.硬件维护的几乎所有IT相关任务,对保障公司业务系统的 ...
- C#删除文件直接到回收站,而不是直接删除
记录下: FileSystem.DeleteDirectory(physicalPath, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycle ...
- oracle自定义类型 示例
) ); ---自定义类型传参给存储过程,示例如下: create or replace procedure dropWf is cursor c_tenant is and t.id not in ...
- [转] NGUI自适应
很多做移动终端开发的童鞋都可能遇到一个问题,就是如何自适应其实NGUI已经能帮我们实现,下面就告诉大家怎么整这个自适应.1,create a new ui 2,uiroot下添加uipanel(scr ...
- Java压缩包解压到指定文件
在获得一个以Zip格式压缩的文件之后,需要将其进行解压缩,还原成压缩前的文件.若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能,因为jdk提供的zip只能按UTF-8格式处理,而Wi ...
- exchange 2003配置ASSP 反垃圾邮件
Exchange上第三方反垃圾邮件用得比较多的是ORF,它直接运行在虚拟SMTP服务上,配置非常的方便.ASSP(https://sourceforge.net/projects/assp/) 是一个 ...