无法打开Camera Service Android

时间:2014-12-23 20:23:28

标签: android camera

我遇到了问题。试图建立一个火炬应用程序。工作正常,但当我切换片段或转到主屏幕并返回闪光灯不会工作。错误无法连接到相机服务。

我认为问题是,我创建了一个新的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);
        }

    }} );

1 个答案:

答案 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