Kamera Licht AN/AUS

  • Antworten:8
  • Bentwortet
Dietrich Gebert
  • Forum-Beiträge: 245

26.08.2013, 20:15:37 via Website

Hallo Leute,

ich möchte für meine kleine Taschenlampen App eine Kameralicht an und aus Schleife realisieren, leider funktioniert es nicht wie geplant.
Das Licht geht paar mal an und aus und dann stürzt die App ab ach ja und der Toggle Button wird auch nicht in der gedrückten Position angezeigt.
Wenn ich auf einen toggle Button klicke soll das Kamera Licht in einer Schleife an und aus gemacht werden bis ich einen anderen Button drücke.
Was mache ich falsch?

Hier ist mein Quellcode.

1public void lightLoop()
2 {
3 long blinkDelay = 50;
4 while(otherModeChoosen == false)
5 {
6 if(camera == null)
7 {
8 camera = Camera.open();
9 Camera.Parameters p = camera.getParameters();
10 p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
11 camera.setParameters(p);
12 camera.startPreview();
13 }
14 else
15 {
16 camera.stopPreview();
17 camera.release();
18 camera = null;
19 }
20 try {
21 Thread.sleep(blinkDelay);
22 } catch (InterruptedException e) {
23 e.printStackTrace();
24 }
25 }
26 }

Grüße
Dima

— geändert am 26.08.2013, 20:16:22

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

26.08.2013, 20:22:21 via Website

Aus dem "Quellcode" kann man echt nix lesen, das ist nur ein Fragment von dem was da nützlich ist. Das Thread handling stinkt aber jetzt schon zum himmel

Übrigens ist es ratsam in einem Thread nach nur EINEM problem zu fragen, nicht UI und deinen Kamera Licht problem gleichzeit. Also entscheide dich erstmal was in diesem Thread beantwortet werden soll. Es gilt immernoch der Satz "Teile und herrsche" ;)

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Dietrich Gebert
  • Forum-Beiträge: 245

26.08.2013, 20:50:28 via Website

Ok ich versuche es mal noch einmal.

Dieses mal beschränke ich mich auf ein Thema:

Mein ziel ist es durch klicken eines Toggle Button das Kamera Licht in einer Schleife AN und Aus zu machen damit es wie ein Blinken aussieht.

Hier nochmal der Quellcode mit Kommentaren.

Diese Methode wird von dem OnClick Listener des Toggle Buttons aufgerufen.

1public void lightLoop()
2 {
3 long blinkDelay = 50; //Hier definiere ich ein Zeitinterval in dem die Lampe AN und wieder ausgeschaltet werden soll
4
5 //dann gehe ich in eine while Schleife und wiederhole so lange bis
6 //die variable von einem anderen Button listener auf true gesetzt wird
7 while(otherModeChoosen == false)
8 {
9 if(camera == null) //Abfrage: wenn die Camera null ist dann Öffne ich ein neue Kamera und weise diese zu
10 {
11 camera = Camera.open();
12 Camera.Parameters p = camera.getParameters();
13 p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
14 camera.setParameters(p);
15 camera.startPreview(); // Blitz wird eingeschaltet
16 }
17 else // wenn Kamera vorhanden war, dann bedeutet dass der Blitz schon an ist und ich mache diesen aus
18 {
19 camera.stopPreview();
20 camera.release();
21 camera = null;
22 }
23 try {
24 Thread.sleep(blinkDelay); Noch ein sleep mit der oben definierten delay zeit um das Ganze ein bisschen zu verlangsamen
25 } catch (InterruptedException e) {
26 e.printStackTrace();
27 }
28 }
29 }

Ich hoffe das ist jetzt ein bisschen besser beschrieben.

Grüße
Dima

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

26.08.2013, 20:57:18 via Website

Das ist der gleiche ausschnitt nur mit Kommentaren, hmm. Da ist aber nicht mal eine #onClick drin....

In 50 Millisekunden soll die lampe den zustand wechseln ? Steht eigentlich irgendwo beschrieben wie schnell man da machen kann in der Doku ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Dietrich Gebert
  • Forum-Beiträge: 245

27.08.2013, 00:58:59 via Website

Hallo,

ich habe den Fehler gefunden.
Das Problem lag daran, dass ich die Schleife für das an und ausmachen der Kamera im gleichen UI Thread ausgeführt habe,
somit ist meine GUI eingefroren und die App ist abgestürzt.

Mache jetzt einen neuen Thread auf und führe die Schleife im Hintergrund aus.
Wie siehts da eigentlich aus muss man die Threads wieder closen oder schließen die sich von alleine wenn der vorgang abgeschlossen wurde?

Naja wieder was dazu gelernt^^.

Grüße
Dima

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

27.08.2013, 01:30:45 via Website

Du kannst sie als gelöst setzen.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Dietrich Gebert
  • Forum-Beiträge: 245

27.08.2013, 14:50:31 via Website

Danke für die Info.

Grüße
Dima

Antworten