2011-06-10 25 views
6

在我的應用程序中,我試圖設置相機。我的類擴展了SurfaceView並實現了SurfaceHolder.Callback方法。Android:相機視圖 - 應用程序崩潰時,我不使用已棄用的方法

下面是我的一些類:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{ 
    private SurfaceHolder mHolder; 
    private Camera.Parameters cameraParameters; 
    private Camera camera; 

    public CameraPreview(Context context) { 
     super(context); 
     mHolder = this.getHolder(); 
     mHolder.addCallback(this); 
     // If this is deprecated, why do I still need it? 
     // It says deprecated, but app crashes when removed. 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
     Camera.Parameters parameters = camera.getParameters(); 
     List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 

     Camera.Size previewSize = previewSizes.get(0); 
     parameters.setPreviewSize(previewSize.width, previewSize.height); 
     camera.setParameters(parameters); 

     try { 
      camera.stopPreview(); 
      camera.setPreviewDisplay(mHolder); 
      camera.startPreview(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     camera = Camera.open(); 
     cameraParameters = camera.getParameters(); 
} 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     camera.stopPreview(); 
     camera.release(); 
     camera = null; 
    } 
} 

我的問題涉及到在構造函數中「的setType」的方法。 API宣稱該方法已被棄用並被忽略。但是,如果我註釋掉那一行,當我調用camera.startPreview()時整個應用程序崩潰。我想弄明白爲什麼。如果它被忽略了,那麼我用這種方法做什麼都不重要。這意味着這個實現有一些非常錯誤的地方。

我使用的是Android 2.2軟件。

任何幫助,將不勝感激。

回答

1

使用Android 2.2 sdk setType方法不被棄用,因爲我已經使用過了。

所以可能會有其他情況下的變化。

(1)檢查您導入的包是android.hardware.Camera。 (2)檢查相機清單文件中添加的所有權限。

+1

這個問題看起來似乎是它最近被廢棄了,正如在這裏指出的那樣:http://code.google.com/p/android/issues/detail?id=16639這將是有益的,如果參考docs實際上是說當一個方法被棄用而不是僅僅改變它時。 – DeeV 2011-06-17 17:23:26

相關問題