应用程序适用于android 2.2,但不适用于2.3
我想写一种相机应用程序,它使用SurfaceView上显示的相机进行实时预览,另一层预览是一个蒙版(有趣的图片等)。点击显示照片的功能。问题是该应用程序在adroid 2.2上工作得很好,但不适用于2.3(使用手机和模拟器)。我有Mainfest中的相机的权利。应用程序适用于android 2.2,但不适用于2.3
这里是我的activivty:
package funny.camera;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
public class CameraActivity extends Activity{
private CamScreen cam;
private LayoutInflater controlInflater = null;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
View touchscreen;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cam = new CamScreen(this);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.camscreen);
surfaceView = (SurfaceView)findViewById(R.id.camerapreview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(cam);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
controlInflater = LayoutInflater.from(getBaseContext());
View viewControl = controlInflater.inflate(R.layout.camoverlay, null);
LayoutParams layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
addContentView(viewControl, layoutParamsControl);
View viewTouch = controlInflater.inflate(R.layout.camtouch, null);
addContentView(viewTouch, layoutParamsControl);
viewControl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cam.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
});
}
ShutterCallback shutterCallback = new ShutterCallback(){
@Override
public void onShutter() {
}};
PictureCallback rawCallback = new PictureCallback(){
@Override
public void onPictureTaken(byte[] arg0, Camera arg1) {
}};
PictureCallback jpegCallback = new PictureCallback(){
@Override
public void onPictureTaken(byte[] _data, Camera _camera) {
}};
}
而且classrelated到相机预览
public class CamScreen extends SurfaceView implements SurfaceHolder.Callback {
//SurfaceHolder sHolder;
//SurfaceView surfaceView;
Camera camera;
CamScreen(Context context) {
super(context);
}
public void surfaceCreated(SurfaceHolder holder) {
// Open the camera and start viewing
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
} catch (IOException exception) {
camera.release();
camera = null;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// Kill all our crap with the surface
camera.stopPreview();
camera.release();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Modify parameters to match size.
Camera.Parameters params = camera.getParameters();
params.setPreviewSize(w, h);
params.setPictureFormat(PixelFormat.JPEG);
camera.setParameters(params);
camera.startPreview();
}
}
任何想法有什么不好?我认为如果应用程序适用于较旧的Android版本,它也适用于新版本。
谢谢
的API 9级具有公共静态相机打开(INT cameraId) 其中cameraid定义了前后摄像头。请更改api级别的android jar并将公共Camera.open()更改为Camera open(int cameraId)
甚至使用更高的API和Camera.open(cameraId)不会阻止应用程序崩溃。而且,API lvl 9+中的camera.open()不应该默认打开后置摄像头吗? – user1248515 2012-03-04 20:12:54
你有没有调试过你的应用程序崩溃或在哪一点上............ – 2012-03-05 14:15:48
在更高级别上更改API后,应用程序在仿真器上工作,但继续下降到电话 – user1248515 2012-03-05 22:51:27
究竟哪个部分不起作用?没有重叠?崩溃? – 2012-03-04 19:25:03
[你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – nfechner 2012-03-04 19:26:07