Камера Android: включение / выключение вспышки камеры - сбой приложения при повороте устройства
У меня есть простое приложение с button
включить / выключить camera flash
:
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;
}
2 ответа
Попробуйте это (я переписал код):
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;
}
}
}
Пытаться:
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;
}