ブラックベリーのブラウザでeventinjectorを使用して、ブラウザを閉じるにはどうすればよいですか。ブラウザが読み込まれたときにハンドヘルドでESCAPEキーが押され、アプリがブラウザを終了してメイン画面に戻ることをシミュレートしたいと思います。私はこれを自分でやろうとしましたが、成功しませんでした。どんな助けでも大歓迎です。
2 に答える
本当にブラウザを制御したい場合は、アプリでBrowserField
,を使用できBrowserField2
ます。
キーを押すか、現在表示されているアプリを追跡するためのリスナーを挿入することもできます。しかし、ユーザーは頻繁にアプリを切り替えており、タッチ インターフェースを備えたデバイスが非常に多いため (ユーザーは esc ボタンなしでページを閉じることができます)、非常に注意が必要です。
ブラウザを閉じる理由はわかりませんが、それが正しいことだとわかっていると思います (また、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;
}