如何在blackberry中的浏览器上使用eventinjector来关闭浏览器。我想模拟在浏览器加载时在掌上电脑上按下的ESCAPE键,以便应用程序退出浏览器并返回主屏幕。我自己尝试过这样做,但没有成功。任何帮助都将非常感激。
答案 0 :(得分:2)
如果您确实想要控制浏览器,可以在应用中使用BrowserField
,BrowserField2
。
您还可以注入监听器以按键或跟踪哪个应用程序现在可见。但它会非常棘手,因为用户经常在应用程序之间切换,现在有很多设备都带有触摸界面(用户可以在没有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;
}