android最新相机打不开,相机出错

照相机出错!

自己做了一个简单的照相机预览的功能,插在程序中,运行出错,大概提示:

Caused by: android.view.InflateException: Binary XML file line #86: Error inflating class surfaceview

还有:

Caused by: java.lang.ClassNotFoundException: android.view.surfaceview

和一大堆:

[CDS]Libcore_io_Posix-throwErrnoException, functionName: access; errno: No such file or directory

我的main.xml文件中第86行是:

android:layout_width="800px"

android:layout_height="480px"

android:layout_gravity="center">

这个surfaceview夹在一堆imageview中;

这样有问题吗?请教各位前辈!!谢谢!

------解决方案--------------------

少了包了吧,建议你去下载个例子看看

------解决方案--------------------

有surfaceview这个系统定义控件么?没有吧,所以报错

还有定义layout_width和layout_height不建议用px作为单位。

因为像素做单位在不同的设备里显示的大小差异可能非常大。建议用dp~

------解决方案--------------------

缺少库文件,如果是第三方库,请导入该库。

------解决方案--------------------

我怎么记得是SurfaceView,xml是大小写敏感的

还有如果你想一进入activity就打开摄像头开启预览, 需要重写callback。另外摄像头你需要在manifest里添加权限

需要一个SurfaceHolder对象

//example

cameraHolder = surface.getHolder();      //surface是你的SurfaceView

cameraHolder.setKeepScreenOn(true);

camera = Camera.open();

camera.setDisplayOrientation(90);

cameraHolder.addCallback(new CameraPreview(camera));

cameraHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

然后重写callback

import java.io.IOException;

import android.hardware.Camera;

import android.view.SurfaceHolder;

public class CameraPreview implements SurfaceHolder.Callback {

private Camera mCamera;

public CameraPreview(Camera camera) {

mCamera = camera;

}

public void surfaceChanged(SurfaceHolder holder, int arg1, int arg2, int arg3) {

if (holder.getSurface() == null) {

return;

}

try {

mCamera.stopPreview();

} catch (Exception e) {

}

try {

mCamera.setPreviewDisplay(holder);

mCamera.startPreview();

} catch (Exception e) {

e.printStackTrace();

}

}

public void surfaceCreated(SurfaceHolder holder) {

try {

mCamera.setPreviewDisplay(holder);

mCamera.startPreview();

} catch (IOException e) {

e.printStackTrace();

}

}

public void surfaceDestroyed(SurfaceHolder holder) {

}

}

录制视频用 mediarecorder

拍照写个 PictureCallback, 实现 onPictureTaken 方法

------解决方案--------------------

借鉴下这个?不过我还没跑过。

不过显然还是用了SurfaceView~

应该是谷歌不希望有这样可能侵犯用户隐私的应用存在,所以要用View显示它,只是在这个应用里用户看不见。

就像service在高版本api下要由activity启动~

http://www.linuxidc.com/Linux/2013-01/78501.htm

你可能感兴趣的:(android最新相机打不开)