Frage

Ich habe eine Blackberry-Anwendung, die Bilder von der Kamera zu nehmen braucht und sich an einen Server senden. Um dies zu tun, rufe ich die native Kamera-Anwendung und hören auf das Dateisystem. Nachdem ein Bild aufgenommen wird und als neue JPEG-Datei gespeichert i Benachrichtigung, im Vordergrund Kontrolle wieder aufnehmen und über mein Geschäft gehen. Das Problem beginnt nach dem ersten Mal auftritt, dieser Zyklus abgeschlossen ist, weil, wenn ich wieder die Kamera-Anwendung entscheiden zu nennen ist es bereits geöffnet, und jetzt wird der Benutzer eine Miniaturansicht des letzten Bildes zu sehen, die getroffen wurde und mehr Tasten, mit denen ihn zu manipulieren / verwalten es. natürlich, was ich der Benutzer sehen will, ist eine Vorschau von dem, was die Kamera „sieht“, bevor er ein weiteres Foto schnappt, wie er zuvor.

Ich habe gedacht verschiedene Möglichkeiten, dies einschließlich der Tötung der Kamera-App jedes Mal zu lösen (Ich verstehe das nicht programmatisch kann getan werden?), CameraArguments zu senden, wenn die App aufgerufen wird (die als nutzlos erscheint), und jetzt ein ich dachte Lösung könnte so einfach Erzeugen einer „ Zurück “ Schlüsselereignis dauern, bis zu meiner app switching back, die das lästige Bearbeitungsbildschirm theoretisch entlassen würde. Könnte dies wirklich geschehen? und wenn nicht, gibt es eine andere mögliche Lösung man sich vorstellen kann?

War es hilfreich?

Lösung

Eine Art Hack ...

  • starten Kamera-App
  • in Timertask überprüfen, ob die Kamera App gestartet und wenn es muß geschlossen werden (einige Flaggen)
  • wenn ja, rufen Sie es (so wird es aktiv wurde) und drücken Sie ESC keypress Ereignis Injektion um es zu schließen

Werfen Sie einen Blick auf diese:

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: Vergessen Sie nicht Berechtigungen für die Gerätemitteilung einzustellen:
Optionen => Erweiterte Optionen => Anwendungen => [Ihre Anwendung] => Standardberechtigungen bearbeiten => Interaktionen => Tastenhub Injection

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top