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");
}
}}
Проблема решена! Для работы mCamera.startPreview() требуется mCamera.takePicture(). Даже если у вас нет другого использования для предварительного просмотра. – Tombola
Возможный дубликат [Android: «Camera.takePicture failed» Exception] (http://stackoverflow.com/questions/4830772/android-camera-takepicture-failed-exception) –
Я не получал никаких исключений. Но в любом случае. – Tombola