浏览器上的EventInjector

时间:2012-06-14 06:59:24

标签: blackberry browser java-me

如何在blackberry中的浏览器上使用eventinjector来关闭浏览器。我想模拟在浏览器加载时在掌上电脑上按下的ESCAPE键,以便应用程序退出浏览器并返回主屏幕。我自己尝试过这样做,但没有成功。任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:2)

如果您确实想要控制浏览器,可以在应用中使用BrowserFieldBrowserField2

您还可以注入监听器以按键或跟踪哪个应用程序现在可见。但它会非常棘手,因为用户经常在应用程序之间切换,现在有很多设备都带有触摸界面(用户可以在没有esc按钮的情况下关闭页面)。

答案 1 :(得分:1)

不确定为什么要关闭浏览器,但我会假设您知道这是正确的事情(同样,Eugen已经建议您如何使用BrowserField让用户从内部浏览你的应用程序并避免这个问题)。

无论如何,我有一些代码用于关闭相机(我的应用程序确实是有意开始的)。您可以以相同的方式关闭浏览器。这是一个黑客,但当时,这是我解决问题的方式:

   /** Delay required to keep simulated keypresses from occurring too fast, and being missed */
   private static final int KEYPRESS_DELAY_MSEC = 100;
   /** Max number of attempts to kill camera via key injection */
   private static final int MAX_KEY_PRESSES = 10;
   /** Used to determine when app has been exposed by killing Camera */
   private MainScreen _mainScreen;
   /** Counter for toggling key down/up */
   private int _keyEventCount = 0;

   public void run() {
      // The picture has been taken, so close the camera app by simulating the ESC key press
      if (!_mainScreen.isExposed()) {
         int event = ((_keyEventCount % 2) == 0) ? EventInjector.KeyCodeEvent.KEY_DOWN :
             EventInjector.KeyCodeEvent.KEY_UP;
         EventInjector.KeyEvent injection = new EventInjector.KeyEvent(event, Characters.ESCAPE, 0);
         // http://supportforums.blackberry.com/t5/Java-Development/How-to-use-EventInjector-to-inject-ESC/m-p/74096
         injection.post();
         injection.post();

         // Toggle back and forth .. key up .. key down
         _keyEventCount++;

         if (_keyEventCount < MAX_KEY_PRESSES) {
            // Keep scheduling this method to run until _mainScreen.isExposed()
            UiApplication.getUiApplication().invokeLater(this, KEYPRESS_DELAY_MSEC, false);
         } else {
            // Give up and just take foreground ... user will have to kill camera manually
            UiApplication.getUiApplication().requestForeground();
         }
      } else {
         // reset flag
         _keyEventCount = 0;
      } 
   }

我的_mainScreen是应该通过关闭相机应用程序发现的Screen,因此我用它来测试我是否成功关闭了相机。此外,在我的应用程序中,我重置

_keyEventCount = 0;

每次启动相机时(上面未显示)。

<强>更新

此外,这是我的_mainScreen对象需要跟踪它是否暴露的代码:

private boolean _isExposed = false;

protected void onExposed() {
    super.onExposed();
    _isExposed = true;
}

protected void onObscured() {
    super.onObscured();
    _isExposed = false;
}

public boolean isExposed() {
    return _isExposed;
}