Предварительный просмотр камеры после блокировки экрана
Пользовательское приложение для камеры, которое я написал, перестает выдавать предварительный просмотр после блокировки экрана (нажатием кнопки блокировки или ожиданием в течение нескольких минут). Я не получаю исключения, что затрудняет поиск проблемы.
Блокировка экрана Android (если это правильный термин) приостанавливает/останавливает/... мое приложение (активность)?
Если бы это было так, может быть причиной моего метода onPause/onResume? Или это еще одна причина?
Заранее спасибо
Ответы
Ответ 1
Я столкнулся с такой же проблемой и исправил ее, выполнив следующие шаги:
-
Я создал предварительный просмотр камеры и добавил его в контейнер FrameLayout в onResume() родительской активности. Что-то вроде:
public void onResume{
super.onResume();
mCamera = Camera.open();
if(null != mCamera){
mCamera.setDisplayOrientation(90);
mPreview = new CameraOverlay(getActivity(), mCamera);
frLyParent.addView(mPreview);
}
}
-
Я удалил представление в onPause(). Это фиксирует замораживание.
public void onPause(){
super.onPause();
if(null != mCamera){
mCamera.release();
mCamera = null;
}
frLyParent.removeView(mPreview);
mPreview = null;
}
где CameraOverlay() - это класс, который расширяет SurfaceView и реализует SurfaceHolder.Callback. Дайте мне знать, если вам нужна эта реализация.
Ответ 2
Спасибо, я использовал модификацию этого, и он тоже работает для меня.
Я добавил mPreview.removeView(mPreview.mSurfaceView);
в onpause()
и mPreview.addView(mPreview.mSurfaceView);
в onResume()
перед тем, как открыть камеру.
Я также удалил addView(mSurfaceView);
в классе предварительного просмотра.
Ответ 3
вот мой, он работает: -)
@Override
public void onResume() {
super.onResume();
try {
camera = Camera.open();
holder.addCallback(this);
surface.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPause() {
try {
surface.setVisibility(View.GONE);
holder.removeCallback(this);
camera.release();
} catch (Exception e) {
e.printStackTrace();
}
super.onPause();
}
Ответ 4
В onResume()
метод добавьте эту строку:
surfaceView.setVisibility(View.VISIBLE);
В onPaused()
метод добавьте эту строку:
surfaceView.setVisibility(View.GONE);