Problema con la cámara cuando cambia la orientación

Estoy haciendo una aplicación que llama a una actividad diferente cuando la orientación del dispositivo cambia de paisaje a retrato o viceversa. La actividad para el modo de paisaje es una realidad aumentada, así que utilizo la cámara para mostrar el entorno al usuario. Sin embargo, cuando intento volver al retrato, la aplicación se bloquea y muestra este error:

08-17 16:05:42.622: ERROR/AndroidRuntime(9769): FATAL EXCEPTION: main 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): java.lang.RuntimeException: set display orientation failed 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.hardware.Camera.setDisplayOrientation(Native Method) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at es.ucm.look.ar.Preview.surfaceChanged(Preview.java:102) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.SurfaceView.updateWindow(SurfaceView.java:549) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.SurfaceView.setFrame(SurfaceView.java:294) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.View.layout(View.java:7169) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.View.layout(View.java:7175) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.View.layout(View.java:7175) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.View.layout(View.java:7175) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.os.Handler.dispatchMessage(Handler.java:99) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.os.Looper.loop(Looper.java:130) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at android.app.ActivityThread.main(ActivityThread.java:3683) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at java.lang.reflect.Method.invokeNative(Native Method) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at java.lang.reflect.Method.invoke(Method.java:507) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 08-17 16:05:42.622: ERROR/AndroidRuntime(9769): at dalvik.system.NativeStart.main(Native Method) 

El cambio de retrato a paisaje funciona normalmente.

Este es mi manifiesto android (la actividad "EmergenciesList" es la del modo retrato y "MapaMovilAR" para lanscape):

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.list" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/icon" android:label="@string/app_name" android:name="cl.puc.memoria.MapaMovilApplication"> <activity android:name="cl.puc.memoria.EmergenciesList" android:configChanges="orientation" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"> </category> </intent-filter> </activity> <activity android:name="cl.puc.memoria.AR.MapaMovilAR" android:configChanges="orientation"> </activity> <activity android:name="es.ucm.look.ar.LookAR"></activity> </application> <uses-sdk android:minSdkVersion="7" /> </manifest> 

Y finalmente este es el código para manejar el cambio de orientación:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Intent el = new Intent(MapaMovilAR.this, cl.puc.memoria.EmergenciesList.class); startActivity(el); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } 

¿Hay algo que podría estar causando el accidente?

Utilizar :

 mCamera.stopPreview(); mCamera.setDisplayOrientation(mRotation); mCamera.startPreview(); 

Camera.setDisplayOrientation sólo puede utilizar 0, 90, 180, 270

Generalmente hay una línea "causada por" en la lectura del error logcat, ¿puedes ver si está ahí e incluirla si es? Ayudará a proporcionar más información.

Cuando ocurre un cambio de orientación, la actividad se destruye. Mi conjetura inicial es que usted está fijando un cierto valor que no sea más válido cuando usted vuelve al modo del retrato. Puede utilizar el paquete savedInstanceState para pasar y persistir estos cambios.

  • Cómo deshabilitar / modificar AutoFocus y AutoWhiteBalance en Android Camera usando OpenCV
  • La cámara del dispositivo virtual Android no funciona a pesar de que he elegido la cámara web como fuente
  • Convertir YUV-> RGB (procesamiento de imágenes) -> YUV durante onPreviewFrame en android?
  • W / CameraBase: Se ha producido un error al conectar a la cámara: 0 en camera.open () call
  • ¿Cómo resolver el error ANR al invocar la cámara?
  • Android: vista de la cámara: la aplicación se bloquea cuando no utilizo un método obsoleto
  • Etiquetado de fotos para Android
  • ¿El método getoutputmediafileuri no es accesible?
  • La imagen tomó de la galería se exhibe en la orientación diferente mientras que usa el teléfono en androide
  • ¿Cuándo debo volver a bloquear la cámara?
  • Retraso extremo de la cámara en Nexus 4
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.