LED-Blitz blitzt nur manchmal!

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

20.11.2013, 18:13:59 via Website

Hey liebe Community,

seid kurzem habe ich ja meine App "Message Light" draußen und musste leider feststellen,
dass der Blitz Effekt nicht immer da ist, sondern manchmal auch nach kurzer Dauer abbricht(ohne Fehlermeldung) oder ganz ausbleibt.
Bei manchen Handys geht er auch gar nicht erst an oder nur dann, wenn das Handy grad ma Bock dazu hat. Es gibt eine App, welche sich "Notification for all" nennt und bei dieser funktioniert es anscheinend.
Ich habe mir auch den Code dieser App angeguckt und muss schon sagen, dass das recht professionell aussieht und da irgendwelche google bibliotheken vohanden sind, trotzdem nervt es mich in meiner App...

Wisst ihr wo das Problem liegen kann?
Auf Bedarf schreibe ich auch den Code hier...(ziemlich groß)...


grüße Fabian!

Antworten
Fabian
  • Forum-Beiträge: 144

20.11.2013, 19:40:25 via Website

Nein nein, die App stürzt nicht ab, nur der Blitz.
Hier mal der Code, wäre nett, wenn du mal kurz drüber schauen könntest:
1public class FlashLightClass {
2
3 static Camera camera;
4 static Camera.Parameters params = null;
5
6 public static boolean isLightning;
7 public static boolean missionCompledet = true;
8
9 static void initCamera() {
10 try {
11 if (camera == null) {
12 camera = Camera.open();
13 } else {}
14 } catch (RuntimeException re) {
15 }
16 }
17
18 static void setFlashOn() {
19 try {
20 if (camera != null) {
21 params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
22 camera.setParameters(params);
23 camera.startPreview();
24 } else {
25 initCamera();
26 }
27 } catch (RuntimeException re) {
28 }
29 }
30
31 static void setFlashOff() {
32 try {
33 if (camera != null) {
34 params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
35 camera.setParameters(params);
36 camera.startPreview();
37 } else {
38 initCamera();
39 }
40 } catch (RuntimeException re) {
41 }
42 }
43
44 static void stopThread() {
45 isLightning = false;
46 Thread.interrupted();
47 }
48
49 static void clearCamera() {
50 if (camera != null) {
51 camera.release();
52 camera = null;
53 }
54 }
55
56 static void startLightning() {
57 new Thread(new Runnable() {
58 @Override
59 public void run() {
60 missionCompledet = false;
61 initCamera();
62 isLightning = true;
63 try{
64 Thread.sleep(100);
65 } catch(InterruptedException ie){}
66 while (isLightning && camera!=null) {
67 try {
68 setFlashOn();
69 Thread.sleep(50);
70 setFlashOff();
71 Thread.sleep(50);
72 } catch (InterruptedException e) {
73 Thread.interrupted();
74 }
75 }
76 missionCompledet = true;
77 clearCamera();
78 }
79
80 }).start();
81 }
82
83}

grüße Fabian!

— geändert am 20.11.2013, 19:42:11

Antworten
Michele
  • Forum-Beiträge: 1.525

20.11.2013, 20:51:43 via Website

Hallo.

Ich versuche dir mal zuhelfen.

Mach bitte mal bei
1Thread.sleep(50);

nicht 50 sondern bitte mind. 100;
Also
1Thread.sleep(100);

Das bei beiden.


LG

Antworten
Fabian
  • Forum-Beiträge: 144

20.11.2013, 21:17:18 via Website

Hey, vielen Dank, dass du mir helfen willst :D

Habe die sleeping time mal auf 100ms erhöht, bringt trotzdem nichts, außer dass der Blitz wenn der denn blitzt, langsamer blitzt... :(

grüße Fabian!

— geändert am 20.11.2013, 21:19:40

Antworten
Michele
  • Forum-Beiträge: 1.525

20.11.2013, 21:19:36 via Website

Ja bisschen langsamer, weil er vielleicht auch mal eine längere Pause dazwischen braucht.

So dachte ich mir das.

Ich sehe da in deinem Code sonst kein Problem.
Debug und LogCat mal angeschaut?


LG

Antworten
Fabian
  • Forum-Beiträge: 144

20.11.2013, 21:21:56 via Website

Außer dass mein Code laienhaft aussieht? :D

Hmm.. wenn ich da mal reinschaue, nur auf die roten Einträge --> ist doch richtig?
Sehe da nichts bemerkenswertes und auch nur Einträge, die nichts mit meiner App zu tun haben...

Hat es vielleicht was mit der Camera zu tun, dass die manchmal einfach zu lange braucht?
Auch der Thread kann keine Probleme machen oder?

edit: Der Code des PhoneStateListeners:
1public class MyPhoneStateListener extends PhoneStateListener {
2
3 MainActivity mainActivity = new MainActivity();
4 SharedPreferences sharedPreferences;
5
6 Context context;
7
8 public MyPhoneStateListener(Context context) {
9 this.context = context;
10 }
11
12 @Override
13 public void onCallStateChanged(int state, String incomingNumber) {
14 switch (state) {
15 case TelephonyManager.CALL_STATE_RINGING:
16 sharedPreferences = context.getSharedPreferences(
17 mainActivity.filesSharedPreferencesImages[3], 0);
18 boolean value = sharedPreferences.getBoolean(
19 mainActivity.filesSharedPreferencesImages[3], true);
20 if (value && FlashLightClass.missionCompledet == true) {
21 FlashLightClass.startThread();
22 break;
23 }
24 case TelephonyManager.CALL_STATE_IDLE:
25 if (FlashLightClass.missionCompledet == false) {
26 FlashLightClass.stopThread();
27 }
28 break;
29 case TelephonyManager.CALL_STATE_OFFHOOK:
30 if (FlashLightClass.missionCompledet == false) {
31 FlashLightClass.stopThread();
32 break;
33 }
34 }
35 }
36}

edit2: Er zeigt mir in Debug was an:
1[2013-11-20 21:27:08 - ddmlib] Broken pipe
2java.io.IOException: Broken pipe
3 at sun.nio.ch.FileDispatcher.write0(Native Method)
4 at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29)
5 at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:69)
6 at sun.nio.ch.IOUtil.write(IOUtil.java:40)
7 at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:336)
8 at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
9 at com.android.ddmlib.Client.sendAndConsume(Client.java:642)
10 at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
11 at com.android.ddmlib.Client.requestAllocationStatus(Client.java:488)
12 at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:835)
13 at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:803)
14 at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:621)
15 at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
16 at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)

grüße Fabian!

— geändert am 20.11.2013, 21:27:44

Antworten
impjor
  • Forum-Beiträge: 1.793

20.11.2013, 21:29:24 via App

Bitte keine static-Klassen. Mach mal alles static weg.
Dann bitte unnötige else-Zweige entfernen, die nichts bewirken.

Aber das Wichtigste: NIE NIE NIE NIEMALS einen catch-Block leer lassen.Wenigstens Log.e(...) und e.printStackTrace(), sonst ist klar, warum nie ein Fehler im Log kommt.

LG

Liebe Grüße impjor.

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

Antworten
Michele
  • Forum-Beiträge: 1.525

20.11.2013, 21:34:26 via Website

impjor
Bitte keine static-Klassen. Mach mal alles static weg.
Dann bitte unnötige else-Zweige entfernen, die nichts bewirken.

Aber das Wichtigste: NIE NIE NIE NIEMALS einen catch-Block leer lassen.Wenigstens Log.e(...) und e.printStackTrace(), sonst ist klar, warum nie ein Fehler im Log kommt.

LG

Ups stimmt ja, da ist ja nichts im catch :grin:
Dann kein wunder das da nichts kommt. :grin:



LG

Antworten
Fabian
  • Forum-Beiträge: 144

20.11.2013, 21:38:14 via Website

Also muss ich statt static Klassen in jedem Service ein Objekt der FlashLightClass erzeugen?
Reicht das denn, wenn ich dieses einmal erzeuge oder bei jedem Aufruf des Receivers?

grüße Fabian König!

Antworten
impjor
  • Forum-Beiträge: 1.793

20.11.2013, 21:54:29 via App

Dein Log scheint so direkt nicht mit deiner App zusammenzuhängen... Ich habe aber noch nie eine Lampenapp programmiert und kann dir da leider nicht weiterhelfen. Viellei liegt es auch schlicht an den Geräten und die andere App fordert diese nicht so stark. (Weniger häufiges Blinken z.B.)?

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

21.11.2013, 21:26:02 via Website

Ok, habe die Sleeping time mal auf 120 ms erhöht und siehe da, läuft ohne Probleme. Gibt zwar immer noch am Anfang manchmal nen freeze aber nach ner Sekunde fängt er sich dann und blitzt ordentlich.
Das ganze aber auf nem s3 mit nem QuadCore, weiß ja nicht wie das auf nem dual oder gar single laufen soll... :(

Trotzdem Danke :D

grüße Fabian!

Antworten