android service中能否进行模拟按键?本帖最后由 lxpspring 于 2011-06-28 16:01:16 编辑求高人指教创建一
android service中能否进行模拟按键?
本帖最后由 lxpspring 于 2011-06-28 16:01:16 编辑 求高人指教
创建一个android service框架下的代码,在这个service中,进行了模拟按键的操作,具体模拟按键的实现:
IBinder wmbinder = ServiceManager.getService( "window" );
final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder );
wm.injectKeyEvent(getKeyEvent(paramList), true);
现在的问题是,代码在service下不起作用,跟踪log,确实有调用函数,但手机没有进行相应的模拟按键操作。
PS:代码在普通有界面的框架(非service)下是可以模拟按键的。
有没有人遇到过这样的情况?
问题出在哪里?
service下不能够实现模拟按键?
求解答
[最优解释]
permission:android.permission.INJECT_EVENTS
[其他解释]
个人感觉,这个和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();
}
[其他解释]
亲,最好是开个线程,我博客有,欢迎光临
http://blog.csdn.net/beeboobeeboo/archive/2011/05/26/6448296.aspx
[其他解释]
windowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
[其他解释]
这个我还没遇到过
[其他解释]
太感谢了。终于有人回复了。
我看了你的博客,那就是说在service框架中也是可以成功进行模拟按键操作的?
我的程序里也起了线程,但做的事情比较多,所以不太能够很快判断出是哪的问题。
现在想自己写个最简单的service去直接尝试模拟按键操作。但还没成功。
[其他解释]关注下,也想知道无界面情况下是否可以模拟按键事件,觉得好像够呛
------其他解决方案--------------------
现在调试状态是,service下执行模拟按键后,手机的键盘灯被点亮,但是手机界面没有反应。
不知道究竟是哪的问题
[其他解释]查了下系统的log,发现提示:Permission denied: injecting key event from pid 460 uid 10037 to window Window......
看有人分析过,是injectKeyEvent不能跨进程传递。
现在还没有找到好的解决方法。有谁知道怎么解决??
[其他解释]这个加上了,没有起作用
[其他解释]是权限的问题
怎么确定手机有root权限?
输入su的话,有#出现,这是表示手机已有root权限吗?
[其他解释]问题解决了。
上来告诉大家一下。
结论是:service里也可以进行按键模拟。只是模拟按键的操作,需要有系统权限。这个系统权限我是通过添加系统签名来解决的。
[其他解释]你好,能给详细说一下过程么?小弟最近在研究这个,还没啥头绪。。。
[其他解释]你遇到了什么问题,能详细点说吗?
模拟按键部分,请参考http://blog.163.com/fanning_7213/blog/static/24965052011312113638776/
[其他解释]你好,想问下,获取系统权限添加系统签名是怎么实现的,我在AndroidManifest.xml里加了:android:sharedUserId="android.uid.system",但是无法安装,应该是系统签名缺失造成的。有什么解决方法吗?
[其他解释]哦。。搞定了。。。
android.mk少加东西了。。。
[其他解释]我已经把APK放进android源码内编译了(packages/apps),但是仍然不行。
[其他解释]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是不能跨进程的.你必须像我这样.
[其他解释]请问能自啊sdk下实现模拟按键事件吗?
一定要在源码下才能可以?
求指点啊
[其他解释]做了一个服务 ,加了系统的签名 跨进程权限不够~ …… 求救
[其他解释]mark,正在研究这个...
[其他解释]如何在源码中编译程序呢?
[其他解释]我这几天也在弄这个.... 看了下你们的帖子,还是没有头绪... 本人菜鸟.. 能不能留个邮箱 交流下??