Android的错误而Camera.open()错误、Android、open、Camera

2023-09-06 17:53:35 作者:彼此請陌生

我只是想尝试在Android上使用我的摄影机。我不知道我能得到错误日志,但我得到一个错误,当我调用函数Camera.open()。

使用IM的SDK例如code,但它没有工作。

我也尝试了设置mCamera发布之前为null。是的,我已经设置好的权限在manifest.xml

它没有与模拟器的作品,即使我的HTC

 包com.example.android.apis.graphics;进口android.app.Activity;进口android.content.Context;进口android.hardware.Camera;进口android.os.Bundle;进口android.view.SurfaceHolder;进口android.view.SurfaceView;进口android.view.Window;进口java.io.IOException异常;公共类相机preVIEW延伸活动{    私人preVIEW米preVIEW;@覆盖保护无效的onCreate(捆绑savedInstanceState){    super.onCreate(savedInstanceState);    //隐藏窗口的标题。    requestWindowFeature(Window.FEATURE_NO_TITLE);    //创建我们的preVIEW查看和设置它作为我们活动的内容。    米preVIEW =新的preVIEW(本);    的setContentView(M preVIEW);}}类preVIEW延伸SurfaceView实现SurfaceHolder.Callback {    SurfaceHolder mHolder;    相机mCamera;preVIEW(上下文的背景下){    超级(上下文);    //安装SurfaceHolder.Callback所以我们得到通知时,    //创建下垫面和销毁。    mHolder = getHolder();    mHolder.addCallback(本);    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}公共无效surfaceCreated(SurfaceHolder持有人){    //表面有被创建,获取摄像机,并告诉它在哪里    //绘制。    mCamera = Camera.open();    尝试{       mCamera.set previewDisplay(支架);    }赶上(IOException异常除外){        mCamera.release();        mCamera = NULL;        // TODO:在此处增加更多的异常处理逻辑    }}公共无效surfaceDestroyed(SurfaceHolder持有人){    //当我们回到地面就会被破坏,因此停止preVIEW。    //因为CameraDevice对象不是共享资源,这是非常    //重要的是释放它当活动被暂停。    mCamera.stop preVIEW();    mCamera.release();    mCamera = NULL;}公共无效surfaceChanged(SurfaceHolder架,INT格式,诠释W,INT高){    //现在,尺寸是已知的,设置相机参数,并开始    //将preVIEW。    Camera.Parameters参数= mCamera.getParameters();    parameters.set previewSize(W,H);    mCamera.setParameters(参数);    mCamera.start preVIEW();}} 

解决方案

看一看在接受的答案here.它应该帮助您开始。

编辑:嗯,你logcat的错误建议你不要在你的清单文件以下行(结束下面的一个< /用途> 元素:

 <使用许可权的android:NAME =android.permission.CAMERA/><使用特征的android:NAME =android.hardware.camera/> 

Android Camera

i just wanna try to Access my Camera on Android. I dont know how i can get error logs, but i get an error when i call the function Camera.open().

Im using the SDK example Code, but it didnt works.

I also tried out to set mCamera to null before releasing. And yes i have setted the permission in the manifest.xml

it didnt works with the emulator even with my htc

package com.example.android.apis.graphics;

import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import java.io.IOException;


public class CameraPreview extends Activity {    
    private Preview mPreview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Hide the window title.
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    // Create our Preview view and set it as the content of our activity.
    mPreview = new Preview(this);
    setContentView(mPreview);
}

}


class Preview extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Camera mCamera;


Preview(Context context) {
    super(context);

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    mCamera = Camera.open();
    try {
       mCamera.setPreviewDisplay(holder);
    } catch (IOException exception) {
        mCamera.release();
        mCamera = null;
        // TODO: add more exception handling logic here
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's very
    // important to release it when the activity is paused.
    mCamera.stopPreview();
    mCamera.release();
    mCamera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // Now that the size is known, set up the camera parameters and begin
    // the preview.
    Camera.Parameters parameters = mCamera.getParameters();
    parameters.setPreviewSize(w, h);
    mCamera.setParameters(parameters);
    mCamera.startPreview();
}

}

解决方案

Have a look at the code provided in the accepted answer here. It should help get you started.

Edit: Ah, your logcat error suggests that you don't have one of the following lines in your manifest file (below the end </application> element:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />