2012-03-04 26 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) { 

     }}; 
} 

そして、何が間違っている任意のアイデア

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(); 
    } 
} 

カメラのプレビューにclassrelated?私はアプリケーションが旧式のアンドロイド版で動作する場合、新しいバージョンでも動作すると思った。

はありがとう

+1

どの部分が正しく動作しないのですか?オーバーレイはありませんか?クラッシュ? –

+2

[何を試しましたか?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – nfechner

答えて

1

APIフロントとリアカメラを定義cameraidレベル9のpublic staticカメラオープン(int型cameraId)が 。 Androidのjarファイルをapiレベルに変更して、メソッドをpublicに変更してください。Camera.open()をCamera open(int cameraId)

+0

より高いAPIとCamera.open(cameraId)を使用してもアプリケーションのクラッシュする。さらに、API lvl 9のcamera.open()は、デフォルトでバックカメラを開いてはいけませんか? – user1248515

+0

あなたのアプリケーションをデバッグしましたかアプリケーションがクラッシュしていますか... –

+0

上位レベルのAPIを変更すると、アプリケーションはエミュレータで動作しますが、電話機に落ちたままになります – user1248515

関連する問題