Was mit der Camera machen?

  • Antworten:0
Fabian
  • Forum-Beiträge: 144

19.10.2013, 22:53:31 via Website

Hey liebe Community,

ich bin dabei, eine App zu schreiben, welche bei einer eingehenden WhatsApp Nachricht das Flash-Licht zum blinken bringt. Das klappt auch wunderbar alles, nur weiß ich nicht, ob ich die Camera nach dem blinken wieder auf null setzen soll und die Camera wieder zu releasen?
Wenn ich eine Nachricht bekommen habe und danach die Android Kamera öffne, bekomme ich einen Kamerafehler. Den bekomme ich, weil ich die Camera in meiner App nicht wieder auf null setze.
Wenn ich die App so schreibe und 5 Nachrichten zur selben Zeit bekomme, bekomm ich natürlich eine Exception, weil sich die Zustände, blinken und auf null setzen überschneiden.
Hier mal die Klasse, mit der ich die Camera kontrolliere:
1public class MyFlashLight{
2
3 Camera camera;
4 Camera.Parameters params;
5 private boolean isRunning = false;
6 private int counter=0;
7 public int counterLimit;
8
9 public MyFlashLight(){
10 initializeCamera();
11 }
12
13 public MyFlashLight(int counterLimit){
14 this.counterLimit = counterLimit;
15 initializeCamera();
16 }
17
18 public void setCameraFlashOn(){
19 params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
20 camera.setParameters(params);
21 camera.startPreview();
22 }
23
24 public void setCameraFlashOff(){
25 params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
26 camera.setParameters(params);
27 camera.startPreview();
28 }
29
30 public void releaseCamera(){
31 camera.stopPreview();
32 camera.release();
33 }
34
35 public void initializeCamera() {
36 camera = Camera.open();
37 getParameters();
38 }
39
40 public void getParameters(){
41 params = camera.getParameters();
42 }
43
44 public boolean getIsRunning(){
45 return this.isRunning;
46 }
47
48 private void checkCounterLimit(){
49 if(this.counter<this.counterLimit){
50 this.counter++;
51 } else if(this.counter>=this.counterLimit){
52 stopThread();
53 }
54 }
55
56 public void stopThread(){
57 isRunning=false;
58 Thread.interrupted();
59 this.counter=0;
60 releaseCamera();
61 }
62
63 public void startThread(){
64 isRunning=true;
65 new Thread(new Runnable(){
66 @Override
67 public void run() {
68 while(isRunning){
69 checkCounterLimit();
70 try {
71 setCameraFlashOn();
72 Thread.sleep(30);
73 setCameraFlashOff();
74 Thread.sleep(30);
75 } catch (InterruptedException e) {
76 e.printStackTrace();
77 }
78 }
79 }
80 }).start();
81 }
82}

Auch wenn ich einen Anruf und gleichzeitig eine WhatsApp Nachricht bekomme, bekomm ich eine: failed to connect to camera service Exception, weil ich auch den Anruf auch mit dem blinken reagiere. Wie machen das denn andere Programmierer von euch, wann initialisieren und wann wieder null bzw. releasen(wo ist eig. der Unterschied?)....

grüße Fabian

Antworten