android service中能否进行模拟按键? 本帖最后由 lxpspring 于 2011-06-28 16:01:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 亲,最好是开个线程,我博客有,欢迎光临http://blog.csdn.net/beeboobeeboo/archive/2011/05/26/6448296.aspx 太感谢了。终于有人回复了。我看了你的博客,那就是说在service框架中也是可以成功进行模拟按键操作的?我的程序里也起了线程,但做的事情比较多,所以不太能够很快判断出是哪的问题。现在想自己写个最简单的service去直接尝试模拟按键操作。但还没成功。 现在调试状态是,service下执行模拟按键后,手机的键盘灯被点亮,但是手机界面没有反应。不知道究竟是哪的问题 查了下系统的log,发现提示:Permission denied: injecting key event from pid 460 uid 10037 to window Window......看有人分析过,是injectKeyEvent不能跨进程传递。现在还没有找到好的解决方法。有谁知道怎么解决?? 个人感觉,这个和service没关系,你有权限inject event吗? 你试试这样行不行啊private void doKey(final int eventCode){ new Thread(new Runnable() { public void run() { long now = SystemClock.uptimeMillis(); try { KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, eventCode, 0); KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, eventCode, 0); windowManager.injectKeyEvent(down, true); windowManager.injectKeyEvent(up, true); } catch (RemoteException e) { Slog.d("Input", "DeadOjbectException"); } } }).start(); } windowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window")); permission:android.permission.INJECT_EVENTS 是权限的问题怎么确定手机有root权限?输入su的话,有#出现,这是表示手机已有root权限吗? 问题解决了。上来告诉大家一下。结论是:service里也可以进行按键模拟。只是模拟按键的操作,需要有系统权限。这个系统权限我是通过添加系统签名来解决的。 你遇到了什么问题,能详细点说吗?模拟按键部分,请参考http://blog.163.com/fanning_7213/blog/static/24965052011312113638776/ 你好,想问下,获取系统权限添加系统签名是怎么实现的,我在AndroidManifest.xml里加了:android:sharedUserId="android.uid.system",但是无法安装,应该是系统签名缺失造成的。有什么解决方法吗? 我已经把APK放进android源码内编译了(packages/apps),但是仍然不行。 哦。。搞定了android.mk少加东西了 请问能自啊sdk下实现模拟按键事件吗?一定要在源码下才能可以?求指点啊 SDK是可以.你导入 dx.jar android.jar. layout.jar 在非Android工程下.使用IBinder wmbinder = ServiceManager.getService( "window" ); IBinder ipbinder = ServiceManager.getService("power"); final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder ); final IPowerManager ip = IPowerManager.Stub.asInterface(ipbinder);这样调用. 将项目打包成jar. push到手机. 用终端export CLASSPATH=/data/local/tmp/Injector.jar; exec app_process /system/bin net.srcz.android.screencast.client.Main " 类似这样的命令打开你的jar包. 单纯用Android项目的inject是不能跨进程的.你必须像我这样. SQLite里,我用保存存储路径大方式存储了很多图片,注意不止一张,想请教一下怎样读出并在GridView中显示 eclipse的问题 本人要做个有声阅读器,不知道用到哪些技术,希望有经验的高手帮帮我 如何做Server端向android客户端推送数据? 请问关于intent的获取 [BK_求助]Android:配置文件AndroidManifest 刚开始着手Android 麻烦大侠解决 andriod2.1系统怎么配置不好 EditText设置字符串的问题 电脑重启后,java命令在cmd下不能用了,提示不是内部或外部命令,之前是好的 模拟按键的问题 急!!dialog窗口上调用显示图片
http://blog.csdn.net/beeboobeeboo/archive/2011/05/26/6448296.aspx
我看了你的博客,那就是说在service框架中也是可以成功进行模拟按键操作的?
我的程序里也起了线程,但做的事情比较多,所以不太能够很快判断出是哪的问题。
现在想自己写个最简单的service去直接尝试模拟按键操作。但还没成功。
不知道究竟是哪的问题
看有人分析过,是injectKeyEvent不能跨进程传递。
现在还没有找到好的解决方法。有谁知道怎么解决??
private void doKey(final int eventCode){
new Thread(new Runnable() {
public void run() {
long now = SystemClock.uptimeMillis();
try {
KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, eventCode, 0);
KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, eventCode, 0);
windowManager.injectKeyEvent(down, true);
windowManager.injectKeyEvent(up, true);
} catch (RemoteException e) {
Slog.d("Input", "DeadOjbectException");
}
}
}).start();
}
怎么确定手机有root权限?
输入su的话,有#出现,这是表示手机已有root权限吗?
上来告诉大家一下。
结论是:service里也可以进行按键模拟。只是模拟按键的操作,需要有系统权限。这个系统权限我是通过添加系统签名来解决的。
模拟按键部分,请参考http://blog.163.com/fanning_7213/blog/static/24965052011312113638776/
你好,想问下,获取系统权限添加系统签名是怎么实现的,我在AndroidManifest.xml里加了:android:sharedUserId="android.uid.system",但是无法安装,应该是系统签名缺失造成的。有什么解决方法吗?
一定要在源码下才能可以?
求指点啊
SDK是可以.你导入 dx.jar android.jar. layout.jar 在非Android工程下.使用
IBinder wmbinder = ServiceManager.getService( "window" );
IBinder ipbinder = ServiceManager.getService("power");
final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder );
final IPowerManager ip = IPowerManager.Stub.asInterface(ipbinder);
这样调用. 将项目打包成jar. push到手机. 用终端
export CLASSPATH=/data/local/tmp/Injector.jar; exec app_process /system/bin net.srcz.android.screencast.client.Main " 类似这样的命令打开你的jar包.
单纯用Android项目的inject是不能跨进程的.你必须像我这样.