2016-07-14 175 views
0

你好,我试图建立自定义相机应用程序遵循Android开发人员指南。该代码是干净的,没有错误,我遵循引导步骤,但当我启动应用程序它崩溃。我正在使用已弃用的相机api。相机应用程序开始崩溃

这是我自己的SurfaceView叫CameraPreview

package guide.android.cameraappandroidguide; 

import android.content.Context; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import java.io.IOException; 


public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{ 

private static final String TAG = "Error"; 

private SurfaceHolder mHolder; 
private android.hardware.Camera mCamera; 


public CameraPreview(Context context,android.hardware.Camera mCamera) { 
    super(context); 
    this.mCamera = mCamera; 

    mHolder = getHolder(); 
    mHolder.addCallback(this); 
} 


@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    try { 
     mCamera.setPreviewDisplay(mHolder); 
     mCamera.startPreview(); 
     Log.e("Surface creata","Ottimo"); 
    } catch (IOException e) { 
     Log.e(TAG,"Error setting camera preview: " + e.getMessage()); 
    } 

} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

    if(mHolder.getSurface()==null){ 
     return; 
    } 

    try { 
     mCamera.stopPreview(); 
    }catch (Exception e){ 
     Log.e(TAG,"Error setting camera preview: "+e.getMessage()); 
    } 

    try { 
     mCamera.setPreviewDisplay(mHolder); 
     mCamera.startPreview(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.e(TAG,"Error setting preview: "+e.getMessage()); 
    } 


} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

} 
} 

代码这是我的MainActivity

package guide.android.cameraappandroidguide; 

import android.hardware.Camera; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.FrameLayout; 

public class MainActivity extends AppCompatActivity { 

private Camera mCamera; 
private CameraPreview mCameraPreview; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //Full screen 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_main); 

    mCamera = getCameraInstance(); 
    mCameraPreview = new CameraPreview(this,mCamera); 

    FrameLayout frameLayoutPreview = (FrameLayout)findViewById(R.id.frame_layout_preview); 
    frameLayoutPreview.addView(mCameraPreview); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    releaseCamera(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    releaseCamera(); 
} 


public static Camera getCameraInstance(){ 
    Camera c= null; 
    //Proviamo ad aprire la Camera 
    try { 
     c = Camera.open(); 
    }catch (Exception e){ 
     Log.e("Error","Can't open th camera device"); 
    } 
    return c; 
}; 

public void releaseCamera(){ 
    if(mCamera!=null){ 
     mCamera.release(); 
     mCamera=null; 
    } 

} 

} 

这是我的logcat的。

enter image description here

在启动应用程序崩溃,我无法理解有什么问题.. 任何人都可以帮助我了解如何我能找到使用logcat的或其他的调试方法错误?

谢谢

+0

你可以分享你的表现? –

+0

在清单中我已经声明使用相机的权限..在任何情况下,我已修复了@chengsam –

回答

0

尝试加入这一行:

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

在此之后:

mHolder = getHolder(); 
mHolder.addCallback(this); 
+0

真的谢谢。我解决了这个问题。 –

相关问题