2012-03-04 190 views
0

我想写一种相机应用程序,它使用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版本,它也适用于新版本。

谢谢

+1

究竟哪个部分不起作用?没有重叠?崩溃? – 2012-03-04 19:25:03

+2

[你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – nfechner 2012-03-04 19:26:07

回答

1

的API 9级具有公共静态相机打开(INT cameraId) 其中cameraid定义了前后摄像头。请更改api级别的android jar并将公共Camera.open()更改为Camera open(int cameraId)

+0

甚至使用更高的API和Camera.open(cameraId)不会阻止应用程序崩溃。而且,API lvl 9+中的camera.open()不应该默认打开后置摄像头吗? – user1248515 2012-03-04 20:12:54

+0

你有没有调试过你的应用程序崩溃或在哪一点上............ – 2012-03-05 14:15:48

+0

在更高级别上更改API后,应用程序在仿真器上工作,但继续下降到电话 – user1248515 2012-03-05 22:51:27

相关问题