plus oreo novedades moto descargar caracteristicas android android-8.1-oreo

novedades - android oreo descargar



Problema de orientaciĆ³n de la pantalla de Android 8.1: voltear para orientar una pantalla vertical (10)

Tengo todas las actividades en modo vertical, excepto la que uso para reproducir un video que siempre es horizontal. Descubrí que en Android 8.1 cada vez que abro la actividad de video y la cierro, la actividad anterior va al paisaje, incluso si está configurada como "vertical" en el manifiesto.

  1. A veces va al retrato y luego al paisaje y permanece en el paisaje.
  2. A veces va al retrato, luego al paisaje y finalmente al retrato nuevamente.

Esto solo sucede cuando retrocede de una actividad que es paisaje.

¿Alguien está experimentando esto?

Gracias.

EDITAR

Reporto el error en Google: https://issuetracker.google.com/issues/69168442

EDITAR 2

Parece arreglado en Android 9


Acabo de encontrar este problema en mi propia aplicación.

La solución que funciona para mí es la siguiente:

onCreate(){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } onPause(){ if (android.os.Build.VERSION.SDK_INT >= 27) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); } } onResume(){ if (android.os.Build.VERSION.SDK_INT >= 27) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } }

El código anterior debe ir en la actividad que está en modo horizontal (es decir, la segunda actividad y la que presiona el botón Atrás)

Me gustaría señalar que esta solución no era mía, y la tomé de la publicación número 20 en el siguiente enlace (que también se observa en el OP):

https://issuetracker.google.com/issues/69168442

Simplemente pensé que podría ser más fácil para las personas acceder si no tienen que buscar en otra página.


El uso de intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) en la Actividad anterior resolvió mi problema.


En el método onCreate de cada actividad, inserte esta línea

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

por el paisaje y

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

para los retratos


Esto solucionó el problema.

Anule el método onBackPressed () de la actividad horizontal y configure la orientación en vertical .

@Override public void onBackPressed() { super.onBackPressed(); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }


La próxima solución puede ayudarlo a resolver el problema.

Debes extender todas tus actividades usando la que está en el código. Se encarga de establecer y restaurar las orientaciones correctas siempre que se invoquen los métodos onPause / onResume.

La solución alternativa funcionará para cualquier tipo de orientación definida en las etiquetas de actividad de manifiesto.

Para mis propios fines, extiendo esta clase desde ComponentActivity , por lo que es posible que desee cambiar esto para extender desde Activity , ActivityCompat o cualquier tipo de actividad que esté utilizando en su código.

public abstract class AbsBaseActivity extends ComponentActivity { private int currentActivityOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; private int parentActivityOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; @CallSuper @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.cacheOrientations(); } private void cacheOrientations() { if (this.currentActivityOrientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { final Intent parentIntent = this.getParentActivityIntent(); if (parentIntent != null) { final ComponentName parentComponentName = parentIntent.getComponent(); if (parentComponentName != null) { this.currentActivityOrientation = this.getConfiguredOrientation(this.getComponentName()); this.parentActivityOrientation = this.getConfiguredOrientation(parentComponentName); } } } } private int getConfiguredOrientation(@NonNull final ComponentName source) { try { final PackageManager packageManager = this.getPackageManager(); final ActivityInfo activityInfo = packageManager.getActivityInfo(source, 0); return activityInfo.screenOrientation; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; } @CallSuper @Override protected void onPause() { if (this.parentActivityOrientation != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { this.setRequestedOrientation(this.parentActivityOrientation); } super.onPause(); } @CallSuper @Override protected void onResume() { super.onResume(); if (this.currentActivityOrientation != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { this.setRequestedOrientation(this.currentActivityOrientation); } } }


Para solucionar este problema:

Cuando regrese a la Actividad A desde la Actividad B y si conoce la orientación de la pantalla de la Actividad A, configure la orientación de la pantalla en la destrucción de la Actividad B.

@Override protected void onDestroy() { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.onDestroy(); }


Si necesita apoyar los cambios de orientación en la actividad de los padres, considere usar la orientación actual en onPause () de su actividad de paisaje.

onCreate(){ super.onCreate(); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } onPause(){ super.onPause(); if (android.os.Build.VERSION.SDK_INT >= 27) { setRequestedOrientation(getResources().getConfiguration().orientation); } } onResume(){ super.onResume(); if (android.os.Build.VERSION.SDK_INT >= 27) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } }

Esta respuesta se basa en la de TheTestSpecimen .


Si tiene DialogTheme like theme = Theme.AppCompat.Light.Dialog en su manifiesto, elimine la etiqueta de orientación establecida para esa actividad de Diálogo del manifiesto, tomará la Orientación de la actividad anterior y colocará la etiqueta de orientación para las actividades restantes

y para las siguientes versiones coloque esto en oncreate

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }

y configure el tema para la aplicación Theme.AppCompat.Light.DarkActionBar sin necesidad de agregar un tema a las actividades


Tuve tal problema y he estado probando todos los casos de uso anteriores. La mayoría de ellos funcionan, pero hay un caso que debe saber:

La razón final fue el uso de fragmentos dentro de un diseño de contenido de actividad en el caso de Android 8 . Por ejemplo: la actividad se inicia en modo horizontal , pero el fragmento muestra el diseño vertical .

Intenta evitar fragmentos.


de la respuesta de Narmi :

Cuando regrese a la Actividad A desde la Actividad B y si conoce la orientación de la pantalla de la Actividad A, configure la orientación de la pantalla en la destrucción de la Actividad B.

debe detectar si la actividad se está destruyendo por el cambio de configuración, por lo tanto, agregue el campo isConfigurationChanged = false , luego en el método onSaveInstanceState gírelo a true y en el método onDestroy agregue esto:

@Override protected void onDestroy() { if(!isConfigurationChanged) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.onDestroy(); }