本帖最后由 lxpspring 于 2011-06-28 16:01:16 编辑

解决方案 »

  1.   

    亲,最好是开个线程,我博客有,欢迎光临
    http://blog.csdn.net/beeboobeeboo/archive/2011/05/26/6448296.aspx
      

  2.   

    太感谢了。终于有人回复了。
    我看了你的博客,那就是说在service框架中也是可以成功进行模拟按键操作的?
    我的程序里也起了线程,但做的事情比较多,所以不太能够很快判断出是哪的问题。
    现在想自己写个最简单的service去直接尝试模拟按键操作。但还没成功。
      

  3.   

    现在调试状态是,service下执行模拟按键后,手机的键盘灯被点亮,但是手机界面没有反应。
    不知道究竟是哪的问题
      

  4.   

    查了下系统的log,发现提示:Permission denied: injecting key event from pid 460 uid 10037 to window Window......
    看有人分析过,是injectKeyEvent不能跨进程传递。
    现在还没有找到好的解决方法。有谁知道怎么解决??
      

  5.   

    个人感觉,这个和service没关系,你有权限inject event吗?
      

  6.   

    你试试这样行不行啊
    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();  
    }  
      

  7.   

    windowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));    
      

  8.   

    permission:android.permission.INJECT_EVENTS
      

  9.   

    是权限的问题
    怎么确定手机有root权限?
    输入su的话,有#出现,这是表示手机已有root权限吗?
      

  10.   

    问题解决了。
    上来告诉大家一下。
    结论是:service里也可以进行按键模拟。只是模拟按键的操作,需要有系统权限。这个系统权限我是通过添加系统签名来解决的。
      

  11.   

    你遇到了什么问题,能详细点说吗?
    模拟按键部分,请参考http://blog.163.com/fanning_7213/blog/static/24965052011312113638776/
      

  12.   


    你好,想问下,获取系统权限添加系统签名是怎么实现的,我在AndroidManifest.xml里加了:android:sharedUserId="android.uid.system",但是无法安装,应该是系统签名缺失造成的。有什么解决方法吗?
      

  13.   

    我已经把APK放进android源码内编译了(packages/apps),但是仍然不行。
      

  14.   

    哦。。搞定了android.mk少加东西了
      

  15.   

    请问能自啊sdk下实现模拟按键事件吗?
    一定要在源码下才能可以?
    求指点啊
      

  16.   


    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是不能跨进程的.你必须像我这样.