2016-07-14 9 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

Действительно спасибо. Я исправил это, добавив это. –

Смежные вопросы