#android #android-layout #android-emulator #android-widget #android-camera
#Android #android-макет #android-эмулятор #android-виджет #android-камера
Вопрос:
mPreview является объектом CameraActivity . и я запускаю просмотр камеры из своего основного действия. Теперь в MainActivity есть метод onPause () .
Прямо сейчас это выглядит так:
protected void onPause() {
super.onPause();
if (counter>=2) {
System.exit(0);
}
}
Но с этим кодом. Мое приложение завершит работу, если перейдет в состояние паузы.
Я хочу, чтобы мое приложение снова запускалось, если пользователь возвращается с паузы устройства.
Итак, для этого я реализовал этот код:
protected void onPause() {
super.onPause();
if (counter>=2) {
//System.exit(0);
try {
if (mPreview.mCamera!=null) {
mPreview.mCamera.stopPreview();
mPreview.isPreviewRunning=false;
mPreview.mCamera.release();
}
} catch (Exception e) {
Log.e("Camera", e.getMessage());
}
//mPreview.mCamera.stopPreview();
}
else{
// mPreview.mCamera.startPreview();
mPreview.isPreviewRunning=false;
}
}
}
Но из-за этого кода иногда мое приложение зависало. Итак, где я ошибаюсь в его реализации??
Трассировка стека:
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): FATAL EXCEPTION: main
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): java.lang.RuntimeException: Method called after release()
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at android.hardware.Camera.setHasPreviewCallback(Native Method)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at android.hardware.Camera.access$600(Camera.java:114)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:472)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at android.os.Looper.loop(Looper.java:123)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at android.app.ActivityThread.main(ActivityThread.java:4633)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at java.lang.reflect.Method.invoke(Method.java:521)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-03 12:26:21.748: ERROR/AndroidRuntime(4295): at dalvik.system.NativeStart.main(Native Method)
11-03 12:26:21.758: WARN/ActivityManager(171): Force finishing activity de.offis.magic.core/.GLCamTest
Спасибо.
Ответ №1:
@Override public void surfaceDestroyed(SurfaceHolder SurfaceHolder) {
this.getHolder().removeCallback(this);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
Log.e("surfaceDestroyed", "surfaceDestroyed");
}
И повторно инициализируйте камеру в функции возобновления.
Ответ №2:
Попробуйте вызвать super.onPause(); после остановки предварительного просмотра и отпускания дескриптора. Это работает для меня.