Вопрос

У меня есть приложение для BlackBerry, которому нужно делать снимки с камеры и отправлять их на сервер.Для этого я вызываю собственное приложение камеры и слушаю файловую систему.Как только изображение будет снято и сохранено в виде нового файла 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