我只是想尝试在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/>
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" />