2013-12-25 2 views
0

SOLVED, СМ. КОММЕНТАРИЙ --- Я никогда не получаю обратный вызов от Camera.takePicture(), я вижу это в logcat. Что не хватает? Как сделать takePicture() ... сделать снимок ?! Большинство из этого напрямую связано с руководством разработчиков камер Android. Я хочу делать снимки программно без предварительного просмотра или действия пользователя. Использование встроенного приложения для камеры отлично работает. SDK 16.Camera.takePicture() не вызывает обратного вызова

И в манифесте я добавил:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" 
android:required="true" /> 

Код:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button bTake = (Button)findViewById(R.id.b_take); 
    boolean boo = safeCameraOpen(camId); 
    Camera.Parameters parameters = mCamera.getParameters(); 
    mCamera.setParameters(parameters); 
    bTake.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      mCamera.takePicture(shutter, null, null, picture); 

      Log.e(getString(R.string.app_name), "After takePicture");    
     } 
    }); 

}// END onCreate 


/* Camera operations */ 

private ShutterCallback shutter = new ShutterCallback() { 
    @Override 
    public void onShutter() { 
     Log.e(getString(R.string.app_name), "onShutter"); 
    } 
}; 

private PictureCallback picture = new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
     Log.e(getString(R.string.app_name), "onPicTaken"); 
    } 
}; 


/* Starting up and closing down*/ 

private boolean safeCameraOpen(int id) { 
    boolean qOpened = false; 
    try { 
     releaseCamera(); 
     mCamera = Camera.open(id); 
     qOpened = (mCamera != null); 
    } catch (Exception e) { 
     Log.e(getString(R.string.app_name), "failed to open Camera"); 
     e.printStackTrace(); 
    } 
    return qOpened;  
} 

private void releaseCamera() { 
    if (mCamera != null) { 
     ((Camera) mCamera).release(); 
     mCamera = null; 
     Log.e(getString(R.string.app_name), "cam released"); 
    } 
}} 
+0

Проблема решена! Для работы mCamera.startPreview() требуется mCamera.takePicture(). Даже если у вас нет другого использования для предварительного просмотра. – Tombola

+0

Возможный дубликат [Android: «Camera.takePicture failed» Exception] (http://stackoverflow.com/questions/4830772/android-camera-takepicture-failed-exception) –

+0

Я не получал никаких исключений. Но в любом случае. – Tombola

ответ

0

Try:

mCamera.takePicture(shutter, picture, picture); 
Смежные вопросы