2014-02-26 61 views
0

我有一個button一個簡單的應用程序開啓/關閉camera flashAndroid相機:開啓/關閉照相機的閃光燈 - 應用程序崩潰時旋轉設備

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button)findViewById(R.id.btnFlash); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if(!isLight) 
       { 
        switchON(); 
       } 
       else 
       { 
        switchOFF(); 
       } 
      } 
     }); 
    } 

如果閃光燈被關閉,它會開啓否則,關閉。是的,它運作良好。 問題是: - 首先,我按了button打開,之後,我旋轉我的設備,然後再次按關閉 - >應用程序崩潰。

致命異常:主 - 運行時異常:無法連接到相機 服務

這2個功能,開啓/關閉

public void switchON() 
    { 
     camera = Camera.open(); 
     Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 
     camera.startPreview(); 
     isLight = true; 
    } 

    public void switchOFF() 
    { 
     Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(p); 
     camera.stopPreview(); 
     camera.release(); 
     isLight = false; 
    } 
+1

_「應用程序崩潰。」_將堆棧跟蹤添加到您的問題。 – Michael

+0

在switchOff()方法中,在使用'camera'對象之前,檢查它是否爲null? – Kedarnath

回答

1

試試這個(我重新寫代碼):

public class YourClass extends Activity { 

    private Button button; 
    private Camera camera; 
    private boolean isLight=false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     button = (Button)findViewById(R.id.btnFlash); 
     button.setOnClickListener(new OnClickListener() { 

     @Override 
      public void onClick(View v) { 
       if(!isLight) 
       { 
        switchON(); 
       } 
       else 
       { 
        switchOFF(); 
       } 
      } 
     }); 


    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     try{ 
      camera = Camera.open(); 
     } catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     if(camera != null){ 
      camera.release(); 
      camera = null; 
     } 
     super.onPause(); 
    } 

    private void switchOFF(){ 
     if(mCamera != null){ 
      Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(p); 
     isLight = false; 
     } 
    } 

    private void switchON(){ 
     if(mCamera != null){ 
      Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 
     isLight=true; 
     } 
    } 
} 
+0

,但將您的代碼添加到我的應用程序,但是當我旋轉我的設備時,即使我還沒有按下按鈕,閃光燈已關閉? –

+0

請更好地解釋你的意思 - 在設備旋轉之前和之後你的閃光燈處於什麼狀態。謝謝 – gilonm

+0

我想按下按鈕時,如果閃光燈關閉,它將會亮起,然後熄滅。但是當我將你的代碼添加到我的應用程序中時:首先,當我按下按鈕時,它是ON - > OK。然後,我旋轉我的設備,閃光燈關閉? (我沒有按下按鈕了) –

0

嘗試:

public void switchOFF() 
    { 

    if(camera == null) 
    { 
     camera = Camera.open(); 
    } 
     Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(p); 
     camera.stopPreview(); 
     camera.release(); 
     isLight = false; 
    } 
相關問題