Camera Flash blinken lassen...?

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

29.09.2013, 01:29:14 via Website

Hey liebe Community,

seid kurzem versuche ich, meine Flashlight bei meinem s3 blinken zu lassen.
Das funktioniert auch ganz gut bis auf, dass die Flashlight nur gefühlt 1 mal in der Sekunde aus und wieder an geht.
1public void flash() { // FlashLight on
2 Runnable runnable = new Runnable() {
3
4
5 @Override
6 public void run() {
7 while (true) {
8 camera = null;
9 camera = Camera.open();
10 p = camera.getParameters();
11 p.setFlashMode(Parameters.FLASH_MODE_TORCH);
12 camera.setParameters(p);
13 camera.startPreview(); // Hier wird das Flashlight aktiviert
14 try {
15 Thread.sleep(20);
16 camera.stopPreview();
17 camera.release(); // Hier wieder deaktiviert
18 } catch (InterruptedException e) {
19 e.printStackTrace();
20 }
21
22 }
23 }
24 };
25 Thread thread = new Thread(runnable);
26 thread.start();
27
28 }

Bei anderen Apps geht das doch auch schneller, wieso will meine App nicht?

Liebe Grüße Fabian!

— geändert am 29.09.2013, 01:30:22

Antworten
impjor
  • Forum-Beiträge: 1.793

29.09.2013, 10:24:54 via App

Es könnte daran liegen, dass du noch ein sleep() nach dem ausschalten des Lichtes benötigst, so dass es länger ausbleibt.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Fabian
  • Forum-Beiträge: 144

29.09.2013, 12:02:51 via Website

Würdest du mir ein Beispiel nennen? Nach dem camera.release() ein sleep einfügen bringt auch nichts :(
Jemand weitere Ideen?

grüße Fabian

— geändert am 29.09.2013, 12:12:10

Antworten
Christian
  • Forum-Beiträge: 307

29.09.2013, 16:28:33 via Website

Hi Fabian,

hast du dir den Thread: Kamera Licht AN/AUS mal angesehen?

das sollte dein Problem eigentlich lösen.

mfg Christian

Antworten
Fabian
  • Forum-Beiträge: 144

29.09.2013, 21:04:20 via Website

Hey Christian,

ich entnehme dem Thread, dass ich die Schleife in einem seperaten Thread :grin: platzieren muss...
Das tue ich doch aber auch, indem ich eine neue Runnable implementiere oder nicht?
Der UI Thread ist doch in meinem Fall nur für die Ausführung der App und die Runnable für das Blitzlicht zuständig?

Blicke mit den Threads noch nicht ganz durch. :huh:


grüße Fabian

Antworten
Dietrich Gebert
  • Forum-Beiträge: 245

01.10.2013, 13:09:37 via Website

Hallo,

die Frage im oben genannten Thread war von mir gestellt.

Als erstes fällt mir auf, dass du in deiner Schleife immer wieder eine neue Kamera initialisierst.
Das sollte vorher geschehen und in der schleife nur der Modus gewechselt werden.

Ich werde heute Abend noch ein Code Beispiel posten wie du es machen könntest.

Kannst ja mal meine Taschenlampen App Testen und schauen ob für dich das Blinken schnell genug ist.
Der Link ist im meiner Signatur.

Grüße
Dima

Antworten
Fabian
  • Forum-Beiträge: 144

01.10.2013, 18:37:07 via Website

Hey Dietrich, nett, dass du dich meldest :)
Ich habe deine App bereits auf meinem Handy installiert. Sehr schön gestaltet übrigens.
Das mit der Initialisierung der Kamera stimmt natürlich, ist auch eig. eine 5 Minuten-App gewesen.
Ich werde mich morgen abend ran setzen und wenns geklappt hat(wovon ich stark ausgehe), werde ich mich melden :D

Grüße Fabian

Antworten
Fabian
  • Forum-Beiträge: 144

03.10.2013, 12:26:26 via Website

So, habe gestern Abend bestimmt 2-3 std daran gearbeitet, nun bekomme ich das Flashlicht überhaupt nicht mehr an -.-
Nicht einmal ohne Thread oder Überprüfung, ob das Gerät Flashlight besitzt, klappt es mehr.
1package com.example.flashdance;
2
3import android.app.Activity;
4import android.content.Context;
5import android.content.pm.PackageManager;
6import android.hardware.Camera;
7import android.os.Bundle;
8import android.view.Menu;
9
10public class FlashDance extends Activity {
11 PackageManager packageManager;
12 static boolean haveFlashLight;
13 static final int millies = 1500;
14 Camera camera;
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_flash_dance);
20 camera = null;
21 camera = Camera.open();
22 Camera.Parameters params = camera.getParameters();
23 params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
24 camera.setParameters(params);
25 camera.startPreview();
26 }
27
28 @Override
29 public boolean onCreateOptionsMenu(Menu menu) {
30 getMenuInflater().inflate(R.menu.flash_dance, menu);
31 return true;
32 }
33
34 public boolean checkFlashLightAvailable(Context context) {
35 if (context.getPackageManager().hasSystemFeature(
36 PackageManager.FEATURE_CAMERA_FLASH)) {
37 return true;
38 } else {
39 return false;
40 }
41 }
42
43}

Habe alles versucht, wo liegt der Fehler? An meinem Handy vielleicht? Mit deiner App funktionierte trotzdem...

edit: Anscheinend doch nicht alles versucht, wenn ich Camera.Parameters.FLASH_MODE_ON durch FLASH_MODE_TORCH ersetze, geht's auf einmal.
Verstehe ich zwar nicht, aber Hauptsache es läuft ;)

edit2: Jetzt bekomme ich nach einiger Zeit einen Fehler im Thread, den ich nicht verstehen kann:
110-03 17:03:10.345: E/AndroidRuntime(31641): FATAL EXCEPTION: Thread-3030
210-03 17:03:10.345: E/AndroidRuntime(31641): java.lang.RuntimeException: Fail to connect to camera service
310-03 17:03:10.345: E/AndroidRuntime(31641): at android.hardware.Camera.native_setup(Native Method)
410-03 17:03:10.345: E/AndroidRuntime(31641): at android.hardware.Camera.<init>(Camera.java:348)
510-03 17:03:10.345: E/AndroidRuntime(31641): at android.hardware.Camera.open(Camera.java:325)
610-03 17:03:10.345: E/AndroidRuntime(31641): at com.example.flashdance.FlashDance.run(FlashDance.java:60)
710-03 17:03:10.345: E/AndroidRuntime(31641): at java.lang.Thread.run(Thread.java:856)
grüße Fabian

edit: Fehler behoben und die App läuft, vielen Dank Leuts :)

— geändert am 10.10.2013, 18:27:08

Antworten