我遇到了问题。试图建立一个火炬应用程序。工作正常,但当我切换片段或转到主屏幕并返回闪光灯不会工作。错误无法连接到相机服务。
我认为问题是,我创建了一个新的Camera实例,然后新的cant再次连接到相机。但我该如何解决呢?
public class FlashCameraManager {
private boolean isFlashOn;
private Camera camera;
public Camera.Parameters params;
// getting camera parameters
public void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
camera = null;
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
} else {
camera.release();
camera = null;
}
}
public void FlashOnOff()
{
//Flash Aktivieren oder deaktivieren
if (isFlashOn)
{
//Turn Flash off
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isFlashOn = false;
Log.d("FlashCameraManager", "Turning Flash off");
}
else
{
// Turn Flash on
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
Log.d("FlashCameraManager", "Turning Flash on");
}
}
public boolean isFlashActive()
{
//Prüfen ob Flash an oder aus ist
return isFlashOn;
}}
这来自MainActivity
final ImageButton flash = (ImageButton) rootView.findViewById(R.id.none_flash);
if(camera == null) {
camera = new FlashCameraManager();
}
camera.getCamera();
flash.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Content
if (camera.isFlashActive())
{
//Turn Flash off
camera.FlashOnOff();
Log.d("NoneFragment", "Turning Flash off");
flash.setActivated(false);
}
else
{
//Turn Flash on
camera.FlashOnOff();
Log.d("NoneFragment", "Turning Flash on");
flash.setActivated(true);
}
}} );
答案 0 :(得分:0)
完成相机操作后(即在退出应用程序或启动其他活动之前),请确保通过调用方法release()
释放相机资源,根据API指南,“断开连接并释放” Camera对象资源“。 API指南还提供了一些有价值的见解,可以正确使用类并执行简单的操作,例如任务图片。可以在此处找到API指南:
http://developer.android.com/reference/android/hardware/Camera.html
您可能还想考虑一下新的相机API(android.hardware.camera2),因为您使用的当前API在API级别21时已弃用。新API的指南可在此处找到:
http://developer.android.com/reference/android/hardware/camera2/package-summary.html