首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BlackBerry -模拟KeyPress事件

BlackBerry -模拟KeyPress事件
EN

Stack Overflow用户
提问于 2009-08-18 09:44:53
回答 1查看 4.7K关注 0票数 3

我有一个BlackBerry应用程序,它需要从相机拍摄照片并将它们发送到服务器。为了做到这一点,我调用本机相机应用程序并侦听文件系统。一旦一个图像被捕获并保存为一个新的jpeg文件,我就会收到通知,恢复前台控制,然后继续我的业务。这个问题在这个周期第一次完成后就开始出现了,因为现在当我决定再次调用照相机应用程序时,它已经打开了,现在用户正在看到最后一张照片的缩略图和几个允许他操作/管理它的按钮。当然,我希望用户看到的是一个预览的相机是“看到”之前,他拍摄另一张照片,因为他以前做的。

我想出了各种方法来解决这个问题,包括每次杀死相机应用程序(我知道这不能通过编程完成?),在调用应用程序时发送CameraArguments (这似乎是无用的),现在我在想,在切换回我的应用程序之前,一个解决方案可以像生成一个" back “键事件一样简单,从理论上说,它会忽略恼人的编辑屏幕。这真的能做到吗?如果没有,你还有其他可能的解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-19 10:03:04

一种黑客..。

  • start Camera App
  • in TimerTask检查相机应用程序是否启动,如果需要关闭(某些标志)
  • (如果是),调用它(因此它将成为活动),并按ESC按键事件注入关闭它

看一看这个:

代码语言:javascript
复制
class Scr extends MainScreen {
    boolean killCameraApp = false;
    final String mCameraModuleName = "net_rim_bb_camera";
    final CameraArguments args = new CameraArguments();

    public Scr() {
        super();

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                if (isCameraRunning() && killCameraApp) {
                    getApplication().invokeAndWait(callCamera);
                    getApplication().invokeAndWait(killCamera);
                }
            }
        }, 0, 100);
    }

    Runnable callCamera = new Runnable() {
        public void run() {
            callCamera();
        }

    };

    Runnable killCamera = new Runnable() {
        public void run() {
            injectKey(Characters.ESCAPE);
            killCameraApp = false;
        }
    };

    private boolean isCameraRunning() {
        boolean result = false;
        ApplicationManager appMan = 
                ApplicationManager.getApplicationManager();
        ApplicationDescriptor[] appDes = appMan.getVisibleApplications();
        for (int i = 0; i < appDes.length; i++) {
            result = mCameraModuleName.equalsIgnoreCase(appDes[i]
                    .getModuleName());
            if (result)
                break;
        }
        return result;
    }

    private void callCamera() {
        Invoke.invokeApplication(Invoke.APP_TYPE_CAMERA, 
                new CameraArguments());
    }

    private void injectKey(char key) {
        KeyEvent inject = new KeyEvent(KeyEvent.KEY_DOWN, key, 0);
        inject.post();
    }

    protected void makeMenu(Menu menu, int instance) {
        menu.add(new MenuItem("start camera", 0, 0) {
            public void run() {
                callCamera();
                killCameraApp = false;
            }
        });
        menu.add(new MenuItem("kill app", 0, 0) {
            public void run() {
                killCameraApp = true;
            }
        });
        super.makeMenu(menu, instance);
    }
}

编辑:不要忘记为设备发布设置权限:

选项=>高级选项=>应用程序=>您的应用程序=>Edit默认权限=>Interactions =>key笔画注入

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1292896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档