我有一个黑莓手机应用程序,需要采取的图片照相机,并把他们送到一个服务器。为了做到这一点,我引用本地摄像机应用程序和听取文件系统。一旦一个图像捕获和保存为一个新的jpeg文件我得到通知,恢复前景控制和走关于我的事务。问题开始后发生的第一时间这个周期完成,因为现在,当我决定调用摄像机再次应用它已经开业,现在的用户看到一个略的最后一张照片,是和几个按钮,让他操纵/管理。当然是我想要的用户看到的是一个预览什么样的摄像机是"看到"之前,他扣的另一张照片,因为他没有过。

我已经想的各种方式来解决这包括杀死的摄像机应用程序,每个时(我知道这不能通过程序?), 发送 CameraArguments 在援引的程序(这似乎是无用的),而现在我在想一个解决方案可以是简单的生""关键事件之前,切换回我的应用程序,它将从理论上讲消除讨厌的编辑画面。这可能真的能做的?如果不是有任何其他可能的解决方法你可能认为的?

有帮助吗?

解决方案

一样的黑客...

  • 启动摄像机应用程序
  • 在TimerTask检查,如果摄像机应用程序的开始,如果它需要被关闭(一些标志)
  • 如果是的话,援引了(这么它会成为活动)以及推ESC按键事件的注射要关闭它

看一下这个:

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);
    }
}

编辑: 不要忘记组的权限设备的释放:
选项=>高级选项=>应用程序=>[您的应用程序]=>编辑默认的权限=>的相互作用=>的关键行程注入

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top