我需要获取当前处于前台的屏幕菜单,然后获取其菜单项并运行其中一个菜单项。我们能以编程方式执行此操作吗 我可以使用下面的代码获取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();
}
但是这段代码的第一行会弹出一个异常:No Application Instance。我怎么解决这个问题?
答案 0 :(得分:1)
您目前的做法不起作用。您无法访问应用程序上下文之外的其他屏幕。
您仍然可以尝试使用event injection。一个经过良好调整的键注入黑客可以完成这项任务(您可以按下菜单键按下以打开它,向下滚动到所需位置,最后注入一个拨轮点击以选择该选项)。问题是这种方法不够可靠。例如,许多应用程序使用事件注入以编程方式关闭相机应用程序,但在OS 6.0上有一些模型无法使用。如果发布了新版本的目标应用程序并且菜单项位置发生了变化,则无效。而且有时需要在每个注入的事件之间调用Thread.sleep
以使其正常工作,但这与设备有关。
简而言之,您可以在某些型号或操作系统版本上进行实验性黑客攻击,但这不是生产代码中的问题。