2017-01-07 64 views
-1

我一直在開發一個簡單的閃光燈應用程序,它的工作原理,但只有一個問題,當我點擊開關按鈕它切換燈,但當我再次點擊應用程序崩潰...切換按鈕崩潰android應用程序

package com.example.flashapp; 

import android.hardware.Camera; 
import android.os.Bundle; 
import android.app.*; 
import android.widget.CompoundButton; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

public class MainActivity extends Activity { 

ToggleButton toggleButton; 
Camera camera; 

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

    toggleButton = (ToggleButton)findViewById(R.id.onOffFlashlight); 

    toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton,boolean checked) { 
       //ToDo something 
       camera = Camera.open(); 
       Camera.Parameters parameters = camera.getParameters(); 
       parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
       Toast.makeText(getApplicationContext(), "Flash Light is ON", Toast.LENGTH_LONG).show(); 
     } 
    }); 

} 

}

+0

可能的話,你需要再次啓動 –

回答

0

你應該在這裏報告崩潰時,總是發佈崩潰日誌。但在這種情況下,我實際上可以告訴你爲什麼 - 因爲你永遠不會釋放相機,第二次調用Camera.open()時,它將返回null,並且您會與NPE一起崩潰。您應該始終在完成相機後釋放相機,並且您需要爲無論何種原因(其他應用程序可能正在使用它)無法獲取相機的情況編碼。

此外,您的複選框始終抓住相機 - 無法將其切換到關閉狀態,您只能對情況進行編碼。

+0

由於之前停止預覽......下一次,我會做到這一點....非常感謝花花公子 – Elias

0

改爲喜歡這個

toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton,boolean checked) { 

      if (isChecked) { 
       camera = Camera.open(); 
       Camera.Parameters parameters = camera.getParameters(); 
       parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
       Toast.makeText(getApplicationContext(), "Flash Light is ON", Toast.LENGTH_LONG).show(); 
      } 
      else { 
        // Code to switch off Flashlight 
      } 

    } 
});