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.
- ¿Cómo integrar ZXing api con cámara frontal en android?
- Correspondencia de plantillas en Android usando openCV
- En Android, ¿cuál es realmente el uso para enfocar el parámetro de área de peso?
- La visualización de vídeo se distorsiona al grabar en el Galaxy S3
- Imagen tomada de cámara o galería cuando se utiliza en imageview su orientación se cambia, ya veces verticalmente se extiende en Android
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?
- Registro de video Android sin audio
- Android: Inyectar la vista previa falsa de la cámara para el propósito de la prueba
- ¿Por qué la vista previa de Mi cámara muestra Horizontal en lugar de Vertical?
- Tome la imagen y convertir a Base64
- Tome la foto de la cámara en fragmento
- Personalizar vista de cámara para Android mediante zbar
- Vista previa de la cámara de corte para TextureView
- Media Recorder start falló en android para cámara
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.