BlackBerry - Simular um evento KeyPress

votos
3

Eu tenho um aplicativo BlackBerry que precisa para tirar fotos da câmera e enviá-las para um servidor. A fim de fazer isso eu chamar o aplicativo de câmera nativa e ouvir o sistema de arquivos. Uma vez que uma imagem é capturada e salva como um novo arquivo jpeg eu ser notificado, retomar o controle do primeiro plano e ir sobre o meu negócio. O problema começa a ocorrer após a primeira vez que este ciclo é concluída porque agora quando eu decidir chamar o aplicativo da câmera mais uma vez, já está aberto, e agora o usuário está vendo uma miniatura da última foto que foi tirada e vários botões que lhe permite manipular / gerenciá-lo. naturalmente o que eu quero que o usuário vê é uma prévia do que a câmera está vendo, antes que ele se encaixe outra foto como fez antes.

Pensei em várias maneiras de resolver este inclusive matando o aplicativo da câmera de cada vez (eu entendo que isso não pode ser feito através de programação?), O envio CameraArgumentsao chamar o aplicativo (que parece ser inútil), e agora eu estava pensando uma solução poderia ser tão simples gerando um Voltar evento chave antes de voltar para o meu aplicativo que teoricamente descartar a tela de edição irritante. Isso poderia realmente ser feito? e se não existe alguma outra solução possível você pode pensar?

Publicado 18/08/2009 em 10:44
fonte usuário
Em outras línguas...                            


1 respostas

votos
4

Uma espécie de corte ...

  • iniciar Camera App
  • em TimerTask verificar se Camera App começou e se ele precisa ser fechado (alguns flag)
  • se sim, invocá-lo (por isso vai tornou-se ativo) e empurre ESC injeção de evento de teclado para fechá-la

Dê uma olhada neste:

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: Não se esqueça de definir permissões para liberação do dispositivo:
Opções => Opções Avançadas => Applications => [a sua aplicação] => Editar permissões padrão => Interações => Injection chave acidente vascular cerebral

Respondeu 19/08/2009 em 11:03
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more