能否模拟 ,你按了机器的back button的keycode给发出去?

解决方案 »

  1.   

    应该用模拟按键吧~
        private void sendKeyEvent(String event) {
            int eventCode = Integer.parseInt(event);
            long now = SystemClock.uptimeMillis();
            Log.i("SendKeyEvent", event);
            try {
                KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, eventCode, 0);
                KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, eventCode, 0);
                (IWindowManager.Stub
                    .asInterface(ServiceManager.getService("window")))
                    .injectKeyEvent(down, true);
                (IWindowManager.Stub
                    .asInterface(ServiceManager.getService("window")))
                    .injectKeyEvent(up, true);
            } catch (RemoteException e) {
                Log.i("Input", "DeadOjbectException");
            }
        }补理解~这个~再看看
      

  2.   

    恩。我在ap层无法获得 IWindowManager对象。楼主还是framework层看看,
    看看AP层有没其他方法直接重写onKeyDown?呵呵
      

  3.   

    加上这个就可以用了
    import android.view.IWindowManager;
    import android.view.KeyEvent;响应事件可以: private final void updateIconKeyAction(Intent intent){
    int     keycode = intent.getIntExtra("keycode", -1);
    if(keycode != -1){
            long now = SystemClock.uptimeMillis();         try {
                KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keycode, 0);
                KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, keycode, 0);
                (IWindowManager.Stub
                    .asInterface(ServiceManager.getService("window")))
                    .injectKeyEvent(down, false);
                (IWindowManager.Stub
                    .asInterface(ServiceManager.getService("window")))
                    .injectKeyEvent(up, false);
            } catch (RemoteException e) {
                Log.i("Input", "DeadOjbectException");
            }

    }
    }
      

  4.   

    谢谢你~  把return事件发给系统~ 恩~明白了 ~~谢谢~
      

  5.   

    楼主的问题已经解决了吗?
    我的问题跟你的一样,在收到intent后,可以进入updateIconKeyAction
    从keyevent也发送了KeyEvent.KEYCODE_BACK消息
    但是logcat上一直打印timeout,不知道是什么原因引起的。
    楼主可否发一部分共享代码给我,小弟不胜感激。
    mail:[email protected]
      

  6.   

    有个情况:我这边一点击statusBAR   就会再最左边显示时间,再点击就会出现对应的记事本类的东东    我想是补是这个影响了 我们自己定制的 软件按钮的事件  造成 超时
      

  7.   

    哇,搞这个的很多啊!我也timeout,是broadcast的时候出现的!你们broadcast的时候没问题么?
      

  8.   

    請問樓主解決這個問題了嗎?
    我用的codebase是Eclair,
    在收到broadcast的時候,
    會作類似sendkeyevent的方式,
    keyCode代入"KEYCODE_BACK",
    從DDMS的log會發現
    "Key dispatching timed out sending to StatusBarExpanded",
    請問樓主有代碼可參考嗎?感激不盡~
    mail: [email protected]