Активность «Пауза» при ожидании появления PictureCallback

Я создаю приложение для Android, где мне бы хотелось дождаться появления PictureCallback до того, как будет запущен процесс вызова.

import android.hardware.Camera; private Camera camera private Bitmap picture; camera.takePicture(null, null, new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 1; picture = BitmapFactory.decodeByteArray(data , 0, data.length, options); } } ... do some other logic with picture 

Я хотел бы, чтобы другая логика была разделена, и поэтому я хотел бы избежать кодирования этого в функции takePicture.

Можно ли это сделать?

Плохая практика блокировать поток пользовательского интерфейса при выполнении каких-либо фоновых работ.

Если вы вызываете встроенную активность камеры, ваша деятельность будет в фоновом режиме. После того, как вы сделали снимок, и активность камеры закроется, к тому времени, как вы вернетесь к своей деятельности, изображение будет сохранено.

Если вы используете свою собственную реализацию Camera тогда вы должны отобразить ProgressDialog и если у вас есть какие-либо фоновые работы, вы должны сделать это в отдельном потоке.

Вы можете реализовать его в двух потоках. Затем сразу после того, как PictureCallback называется вызовом wait () в текущем потоке. Затем, когда PictureCallback завершен, он вызывает notify (), чтобы поток ожидания знал, что он нормально заканчивается. Но вы не хотите блокировать свой основной поток. Вы можете, если хотите / нуждаетесь, но это не очень хорошая идея.