Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BlackBerry-模拟按键事件_Blackberry_Integration_Camera_Rim 4.5 - Fatal编程技术网

BlackBerry-模拟按键事件

BlackBerry-模拟按键事件,blackberry,integration,camera,rim-4.5,Blackberry,Integration,Camera,Rim 4.5,我有一个黑莓应用程序,需要从相机拍摄照片并将其发送到服务器。为了做到这一点,我调用本机摄像头应用程序并监听文件系统。一旦图像被捕获并保存为新的jpeg文件,我会得到通知,恢复前台控制并开始我的业务。在第一次完成此循环后,问题开始出现,因为现在当我决定再次调用相机应用程序时,它已经打开,现在用户看到上次拍摄的照片的缩略图和几个按钮,允许他操作/管理它。当然,我想让用户看到的是在他像以前那样拍摄另一张照片之前,相机“看到”的预览 我想出了各种方法来解决这个问题,包括每次都杀掉camera应用程序(我

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

我想出了各种方法来解决这个问题,包括每次都杀掉camera应用程序(我知道这不能通过编程实现?),调用应用程序时发送
CameraArguments
(这似乎没用),现在我在想一个解决方案可以简单地生成一个“Back”切换回我的应用程序之前的关键事件,从理论上讲,这将消除恼人的编辑屏幕。这真的能做到吗?如果没有的话,还有没有其他可能的解决方案呢?

一种黑客

  • 启动照相机应用程序
  • 在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);
    }
}
class Scr扩展主屏幕{
布尔killCameraApp=false;
最后一个字符串mCameraModuleName=“net\u rim\u bb\u camera”;
final CameraArguments args=新CameraArguments();
公共Scr(){
超级();
定时器=新定时器();
timer.scheduleAtFixedRate(新TimerTask(){
公开募捐{
if(isCameraRunning()&&killCameraApp){
getApplication().invokeAndWait(callCamera);
getApplication().invokeAndWait(killCamera);
}
}
}, 0, 100);
}
Runnable callCamera=new Runnable(){
公开募捐{
callCamera();
}
};
Runnable killCamera=new Runnable(){
公开募捐{
injectKey(Characters.ESCAPE);
killCameraApp=false;
}
};
私有布尔isCameraRunning(){
布尔结果=假;
ApplicationManager appMan=
ApplicationManager.getApplicationManager();
ApplicationDescriptor[]appDes=appMan.getVisibleApplications();
对于(int i=0;i
编辑:不要忘记设置设备发布权限:

选项=>高级选项=>应用程序=>[您的应用程序]=>编辑默认权限=>交互=>按键注入

您使用的是什么型号/操作系统版本?@MaxGontar我也像您所说的那样尝试过。执行关键方法。但不要关上相机。你能帮我吗。@MaxGontar只是好奇,是否可以在其他应用程序(甚至是sys应用程序)中注入事件,因为如果是android,这将是一个安全例外。