0

現在フォアグラウンドにある画面のメニューを取得してから、そのメニュー項目を取得して、そのメニュー項目の1つを実行する必要があります。これをプログラムで実行できますか?以下のコードで、モジュール名を持つApplicationDescriptorを取得できます。

int moduleHandle = CodeModuleManager.getModuleHandle("module name");
ApplicationDescriptor[] apDesArr = CodeModuleManager.getApplicationDescriptors(moduleHandle); 

ApplicationDecriptor  apDes = apDesArr[0];

しかし、次に何をすべきか。助けてください。前もって感謝します。

アップデート:

私はこのコードを通して画面を取得します:

private static void runMenuItem(String menuItemText) {

  Screen screen = Ui.getUiEngine().getActiveScreen();

  Menu menu = screen.getMenu(0);

  for (int i = 0, cnt = menu.getSize(); i < cnt; i++)

    if(menu.getItem(i).toString().equalsIgnoreCase(menuItemText))

            menu.getItem(i).run();
}

ただし、このコードの最初の行には、「アプリケーションインスタンスなし」という例外が表示されます。どうすればこれを解決できますか?

4

1 に答える 1

1

現在のアプローチは機能しません。アプリケーションコンテキスト外の他の画面にアクセスすることはできません。

イベントインジェクションを引き続き使用できます。よく調整されたキーインジェクションハックでうまくいく可能性があります(メニューキーを押して開き、目的の位置までスクロールダウンして、最後にトラックホイールクリックをインジェクトしてオプションを選択します)。問題は、このアプローチの信頼性が十分でないことです。たとえば、多くのアプリはイベントインジェクションを使用してプログラムでカメラアプリを閉じますが、OS6.0ではこれが機能しないモデルがいくつかあります。ターゲットアプリの新しいバージョンがリリースされ、メニュー項目の位置が変更された場合、は機能しません。Thread.sleepまた、注入された各イベント間でそれを機能させるために呼び出す必要がある場合もありますが、これはデバイスに大きく依存します。

つまり、一部のモデルやOSバージョンで実験的なハックを実行することもできますが、本番コードに組み込むことはできません。

于 2012-12-03T12:21:40.777 に答える