Estoy enfrentando el problema al recuperar los contactos de la libreta de contactos en Android 8.0 Oreo java.lang.IllegalStateException: solo las actividades opacas a pantalla completa pueden solicitar orientación
Estoy tratando de obtener el contacto en mi actividad de la guía telefónica y funciona perfecto para Lollipop, Marshmallow, Nougat, etc., pero me dará el error de Oreo como este, por favor, ayúdenme. Mi código está aquí abajo.
Código de demostración: -
private void loadContacts() {
contactAsync = new ContactLoaderAsync();
contactAsync.execute();
}
private class ContactLoaderAsync extends AsyncTask<Void, Void, Void> {
private Cursor numCursor;
@Override
protected void onPreExecute() {
super.onPreExecute();
Uri numContacts = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] numProjection = new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};
if (android.os.Build.VERSION.SDK_INT < 11) {
numCursor = InviteByContactActivity.this.managedQuery(numContacts, numProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
} else {
CursorLoader cursorLoader = new CursorLoader(InviteByContactActivity.this, numContacts, numProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
numCursor = cursorLoader.loadInBackground();
}
}
@Override
protected Void doInBackground(Void... params) {
if (numCursor.moveToFirst()) {
try {
final int contactIdIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
final int displayNameIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
final int numberIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
final int typeIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
String displayName, number, type;
do {
displayName = numCursor.getString(displayNameIndex);
number = numCursor.getString(numberIndex);
type = getContactTypeString(numCursor.getString(typeIndex), true);
final ContactModel contact = new ContactModel(displayName, type, number);
phoneNumber = number.replaceAll(" ", "").replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-", "");
if (phoneNumber != null || displayName != null) {
contacts.add(phoneNumber);
contactsName.add(displayName);
contactsChecked.add(false);
filterdNames.add(phoneNumber);
filterdContactNames.add(displayName);
filterdCheckedNames.add(false);
}
} while (numCursor.moveToNext());
} finally {
numCursor.close();
}
}
Collections.sort(contacts, new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return lhs.compareToIgnoreCase(rhs);
}
});
InviteByContactActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mContactAdapter.notifyDataSetChanged();
}
});
return null;
}
}
private String getContactTypeString(String typeNum, boolean isPhone) {
String type = PHONE_TYPES.get(typeNum);
if (type == null)
return "other";
return type;
}
static HashMap<String, String> PHONE_TYPES = new HashMap<String, String>();
static {
PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_HOME + "", "home");
PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE + "", "mobile");
PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_WORK + "", "work");
}
}
Registro de errores:-
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example, PID: 6573
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.Activity.InviteByContactActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
java
android
android-8.0-oreo
android-8.1-oreo
Shubham Sejpal
fuente
fuente
Respuestas:
El problema parece estar sucediendo cuando su SDK objetivo es 28. Entonces, después de probar muchas opciones, finalmente funcionó.
estilo:-
Nota: parent = "Theme.AppCompat.Light.NoActionBar" es necesario para la API 28. Anteriormente tenía algo más en la API 26. Estaba funcionando muy bien pero comenzó a dar problemas a los 28. Espero que ayude a alguien aquí. EDITAR: para algunos solo estableciendo
<item name="android:windowIsTranslucent">false</item> and <item name="android:windowIsFloating">false</item>
trabajado . Puede depender de la forma en que implementa la solución funciona. En mi caso funcionó estableciéndolos en verdadero.fuente
<item name="android:windowIsTranslucent">false</item>
y también tuve que configurar<item name="android:windowIsFloating">false</item>
antes de que funcione.screenOrientation
atributo en laactivity
etiqueta, y lo único que causa el bloqueo sescreenOrientation
establece mientrasandroid:windowIsTranslucent
se establece en verdadero.En Android Oreo (API 26) no puede cambiar la orientación de la actividad que tiene estilo debajo de la (s) línea (s)
o
Tienes varias formas de resolver esto:
1) Simplemente puede eliminar las líneas anteriores (o convertirlas en falsas ) y su aplicación funciona bien.
2) O puede eliminar primero la línea inferior del manifiesto para esa actividad
Luego debe agregar esta línea a su actividad (en onCreate ())
3) Puede crear nueva
styles.xml
en lavalues-v26
carpeta y agregar esto a sustyle.xml
. (Gracias al comentario de AbdelHady )fuente
android.os.Build.VERSION.SDK_INT != Build.VERSION_CODES.O
styles.xml
envalues-v26
Para desactivarandroid:windowIsTranslucent
sólo para esa API.<bool name="allowWindowFullScreenTranslucent">true</bool>
y me referí a ella en<item name="android:windowIsTranslucent">@bool/allowWindowFullScreenTranslucent</item>
. Luego, en styles.xml en valores-v26 configúrelo enfalse
y en values y values-v27 configúrelo entrue
.En Android O y versiones posteriores, este error ocurre cuando configura
en manifiesto.
Elimina esa línea y usa
en tu actividad
Esto solucionará tu problema.
fuente
<item name="android:windowIsTranslucent">true</item>
de mi estilo que hereda deTheme.AppCompat.Light.NoActionBar
trabajado para mí.Google lanza esta excepción en el
onCreate
método de la Actividad después de la v27, su significado es: si una Actividad es translúcida o flotante, su orientación debe basarse en la Actividad principal (en segundo plano), no puede tomar una decisión sobre sí misma.Incluso si elimina
android:screenOrientation="portrait"
de la Actividad flotante o translúcida, pero fija la orientación en su Actividad principal (de fondo), todavía está fijada por la principal, ya lo he probado.Una situación especial: si hace que la actividad del iniciador sea translúcida, no tiene padre (fondo), así que siempre gire con el dispositivo. Si desea solucionarlo, debe tomar otra forma de reemplazar el
<item name="android:windowIsTranslucent">true</item>
estilo.fuente
Si utiliza una actividad transparente a pantalla completa, no es necesario especificar el bloqueo de orientación de la actividad. Tomará la configuración de la actividad principal. Entonces, si la actividad principal tiene en el manifiesto:
su actividad translúcida tendrá el mismo bloqueo de orientación: vertical.
fuente
Solía en
android:screenOrientation="behind"
lugar deandroid:screenOrientation="portrait"
. Básicamente, creó un cuadro de diálogo (en una actividad) y el cuadro de diálogo no puede solicitar orientación por sí mismo, necesita actividad principal para hacerlo (porque un elemento primario es visible en el fondo y tiene su propio diseño).fuente
La única solución que realmente funciona:
Cambio:
a:
en styles.xml
Pero esto podría provocar un problema con su pantalla de inicio (pantalla blanca al inicio) ... En este caso, agregue la siguiente línea a su styles.xml:
justo debajo de la ventana es una línea translúcida.
Última oportunidad si los consejos anteriores no funcionan: apunte SDK 26 en su lugar o 27.
fuente
Si tiene que usar
setRequestedOrientation()
, no hay otra forma que sacrificar el atributo windowIsTranslucent en Android 8.0values\styles.xml
para api nivel 25- (<8.0)values-v26\styles.xml
para el nivel 26 de la API (= 8.0)values-v27\styles.xml
para el nivel de API 27+ (> 8.0)fuente
Muchas personas han dado una solución, por lo que hablaré sobre la fuente del problema.
De acuerdo con el registro de excepciones:
El código que activó la excepción en Activity.java
mActivityInfo.isFixedOrientation () :
De acuerdo con el análisis de código anterior, cuando TargetSdkVersion> = 27, cuando se usan SCREEN_ORIENTATION_LANDSCAPE, SCREEN_ORIENTATION_PORTRAIT y otros atributos relacionados, el uso de los atributos de tema windowIsTranslucent, windowIsFloating y windowSwipeToDismiss desencadenará una excepción.
Una vez que se encuentra el problema, puede cambiar TargetSdkVersion o eliminar los atributos relacionados del tema según sus necesidades.
fuente
No puedo aceptar la respuesta más valorada, porque
causa un error
pero esto hace que funcione para mí
y úselo para su Actividad, cuando se extiende desde
en AndroidManifest.xml
fuente
Simplemente elimine esta línea
android:screenOrientation="portrait"
de actividad en Manifiest.xmlEsa actividad obtendrá orientación de su actividad anterior, por lo que no es necesario aplicar la orientación que tiene
<item name="android:windowIsTranslucent">true</item>
.fuente
parece que cuando el sdk objetivo es circular (nivel de API 28.0) y windowIsTranslucent es verdadero
<item name="android:windowIsTranslucent">true</item>
e intentas acceder a la orientación. El problema viene con Android Oreo 8.0 (API nivel 26) Hay dos formas de resolver esto
si está configurando orientación en manifiesto como este
o en una clase de actividad como esta
eliminar de ambos lugares.
y observado cuando configuras windowIsTranslucent en true, toma orientación de la actividad principal.
fuente
en el archivo de manifiesto, configure la segunda actividad parentActivityName como primera actividad y elimine el parámetro screenOrientation de la segunda actividad. significa que su primera actividad es el padre y decide una orientación de su segunda actividad.
fuente
Simplemente configure la orientación de la actividad en Manifiest.xml
O para restringido a orientación vertical
También puede usar en Actividad,
onCreate
Llamada al método antes,super.onCreate(...)
p. Ej.fuente
Tuve el mismo problema y mi solución fue eliminar la línea.
y luego agregue esto en la actividad:
fuente
Después de investigar un poco, parece que este problema puede deberse a un error de Google. Para mí, pude dejar esta línea en mi método de Actividades en Crear:
Y cambié mi targetSdkVersion a 26. Tener esa línea en mi onCreate todavía resultó en un bloqueo mientras mi targetSdkVersion todavía estaba configurado en 27. Dado que la solución de nadie más me ha funcionado hasta ahora, descubrí que esto funciona como una solución temporal para ahora.
fuente
Es un conflicto (error) entre Temas dentro del archivo style.xml en las versiones de Android 7 (niveles de API 24,25) y 8 (niveles de API 26,27), cuando tiene
android:screenOrientation="portrait"
: actividad específica interna (que se bloquea) en AndroidManifest.xmlY
en el tema que se aplica a esa actividad dentro de style.xml
Se puede resolver de esta manera según su necesidad:
1- Eliminar una de las propiedades mencionadas anteriormente que hacen conflicto
2- Cambie la orientación de la actividad a uno de estos valores según lo necesite:
unspecified
obehind
así sucesivamente, que puede encontrar aquí: referencia de Google para Android: screenOrientation `3- Establecer la orientación mediante programación en tiempo de ejecución
fuente
Recientemente me enfrenté al problema y aquí está la solución.
No es necesario cambiar el parámetro de orientación de la pantalla que configuró en el archivo de manifiesto de Android.
Simplemente agregue dos carpetas en
Luego copie su archivo styles.xml y themes.xml allí.
y cambie los siguientes parámetros de VERDADERO a FALSO.
Funcionará.
Un error común de Android 8.0
fuente
Enfrenté este problema solo en el SDK 26 (8.0.0) si utilicé windowIsTranslucent 'true' y establecí la orientación con fuerza:
Aquí está la solución:
fuente
Recibí este error cuando intento capturar una imagen o tomar una imagen de la galería, lo que funciona para mí es eliminar ambas
y
ahora mi actividad está usando este tema:
fuente
windowIsFloating
causa el mismo bloqueo quewindowIsTranslucent
.solo 8.0.0 arroja la excepción, por encima de 8.0 ha eliminado la excepción
fuente
appInfo.targetSdkVersion > O
lanzar la excepcióntarget
versión SDK. No importa qué versión de SDK esté ejecutando el dispositivo, está compilando contra Android O (28) pero no sigue las convenciones de esa versión de la plataforma.Lo único que funcionó para mí fue cambiar
a
en el manifiesto para todas las actividades translúcidas.
De esa manera, es compatible con todas las versiones de API, ya que la actividad translúcida parece heredar su orientación de la actividad principal a partir de
targetApi: 28
.El estilo se puede dejar como está incluido
<item name="android:windowIsTranslucent">true</item>
.fuente
Utilizar
Y tema
fuente
No sé si esto es un error de Google o un comportamiento previsto, pero (al menos momentáneamente) lo resolví cambiando compileSdkVersion y targetSdkVersion de nuevo a 26 en Gradle ...
fuente
Si no ha resuelto su problema, simplemente registre la actividad publicitaria en el manifiesto de esta manera:
También necesita actualizar a la última versión del SDK.
fuente
Probablemente esté mostrando la actividad como un cuadro de diálogo (no a pantalla completa), por lo tanto, elimine screenOrientation del manifiesto o del código. Esto solucionará el problema.
fuente
esto sucedió después del 27, use targetSdkVersion 26 replace, espere a que Google lo arregle
fuente
Acabo de eliminar las etiquetas "retrato" de los elementos que no son de pantalla completa y todo salió bien.
fuente
Verifique el estilo de su Actividad y asegúrese de que si no está usando ningún elemento relacionado con Translucent, cambie el estilo para alternar. Para que podamos solucionar este problema.
fuente
android:screenOrientation="portrait"
Resolví este problema eliminando y agregué el siguiente código en mi onCreatemientras que mis propiedades de tema son
fuente