2016-12-16 7 views
6

Ich versuche Option wie SOS-Modul in meiner app erstellen, I-Code erstellen zu handhaben:Option wie SOSModule funktionierte nicht

class SOSModule { 
private Camera camera; 
private Camera.Parameters params; 
private boolean isFlashOn; 

void blink(final int delay, final int times) { 
    Thread t = new Thread() { 
     public void run() { 
      try { 

       for (int i=0; i < times*2; i++) { 
        if (isFlashOn) { 
         turnOffFlash(); 
        } else { 
         Camera.open(); 
         turnOnFlash(); 
        } 
        sleep(delay); 
       } 

      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    }; 
    t.start(); 
} 

void turnOnFlash() { 
    if (!isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 
     params = camera.getParameters(); 
     params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 
     isFlashOn = true; 
    } 

} 

void turnOffFlash() { 
    if (isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 
     params = camera.getParameters(); 
     params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
     camera.setParameters(params); 
     camera.stopPreview(); 
     isFlashOn = false; 
    } 
} 

}

ich auch hinzufügen, alle erforderlichen Berechtigungen in einem offenkundigen und natürlich überprüfe ich die Erlaubnis rechtzeitig.

Aber das ist keine Arbeit. Ich erstelle nur anderen Code, arbeite aber wie "One Flash" ohne Zyklus.

Können Sie mir helfen?

Jungs das ist wichtig für mich, ich kann dies tun, weil mein Huawei p8 Lite und p9 Lite keine Fehler geben, wenn dies passiert, es ist ein Huawei-Software-Problem, mit der Kamera muss ich es auf psychische Gerät testen, und seine a großes Problem, dass ich keine Protokolle von Geräten habe.

public void flash_effect() throws InterruptedException 
{ 
    cam = Camera.open(); 
    final Camera.Parameters p = cam.getParameters(); 
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 


    Thread a = new Thread() 
    { 
     public void run() 
     { 
      for(int i =0; i < 10; i++) 
      { 
       cam.setParameters(p); 
       cam.startPreview(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       cam.stopPreview(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     } 
    }; 
    a.start(); 
}} 

Dieser Code funktioniert, aber Flash ist offen für die Unendlichkeit ohne Blinkeffekt Jede Idee ??

+0

liest es zum Absturz bringen und eine Ausnahme auslösen, oder es tut einfach nichts auf SOS-Knopfdruck? –

+0

Hatte ein ähnliches Problem früher http://stackoverflow.com/questions/39055659/thread-interrupt-alternatives –

+0

Nichts passiert, wenn ich auf die SOS-Taste klicken – Rodriquez

Antwort

0

Sein, weil Ihr Fadenlauf nicht

aufgerufen wird

Versuchen Sie, diese

void blink(final int delay, final int times) { 
    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 

      try { 

       for (int i=0; i < times*2; i++) { 
        if (isFlashOn) { 
         turnOffFlash(); 
        } else { 
         turnOnFlash(); 
        } 
        Thread.sleep(delay); 
       } 

      } catch (Exception e){ 
       e.printStackTrace(); 
      } 

     } 
    }); 

    t.start(); 
} 

können Sie mehr hier

Thread: Not calling run method

1

Sie benötigen eine Flagge, die Ihrem Thread mitteilt, wann er anhalten soll.

boolean shouldStop = false; 

    while (!shouldStop){ 
     if(FlashOn){ 
     ...//do SOS stuff 
     } 
    } 

    public void endSOS(){ 
     shouldStop = true; 
    } 
+0

Ich sollte diese Flagge in den Thread ja setzen? – Rodriquez

+0

In der Lauffunktion ja. –

+0

Versucht dies, aber hat nicht funktioniert – Rodriquez

Verwandte Themen