2017-01-07 45 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 
      } 

    } 
});