2016-12-16 47 views
6

我想在我的應用程序創建一個像SOS模塊選項,我創建的代碼來處理這個問題:選項像SOSModule沒有工作

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; 
    } 
} 

}

我還添加所有必需的權限清單中和當然我會按時檢查使用權限。

但這沒有工作。我只是創建其他代碼,但像沒有任何循環一樣工作。

你們能幫我嗎?

這對我很重要,我不能這樣做,因爲我的華爲p8 Lite和p9 Lite不會給出任何錯誤,當發生這種情況時,它是一個華爲軟件問題,相機我需要在精神設備上測試它,它的一個大問題,我沒有任何來自設備的日誌。

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(); 
}} 

此代碼工作,但閃光燈是開放的無窮無任何閃爍效果 任何想法?

+0

它會崩潰,並拋出一個異常,它只是沒有做任何事情在SOS按鈕按? –

+0

早些時候有類似問題http://stackoverflow.com/questions/39055659/thread-interrupt-alternatives –

+0

什麼都沒有發生,當我點擊SOS按鈕 – Rodriquez

回答

0

它,因爲你的線程運行時不會被調用

試試這個

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(); 
} 

,你可以在這裏閱讀更多

Thread: Not calling run method

1

您需要一個標誌,告訴您的線程何時停止。

boolean shouldStop = false; 

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

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

我應該把這個標誌線程是嗎? – Rodriquez

+0

在運行功能中,是的。 –

+0

試過這個,但沒有工作 – Rodriquez