update studio start quick integrar google application activity android admob android-8.1-oreo

android - studio - Anuncios intersticiales de Admob: "IllegalStateException: solo las actividades de pantalla completa pueden solicitar orientaciĆ³n"



integrar admob android studio (7)

En Android Oreo, no puede cambiar la orientación por código, por lo que debe verificar cada vez que cambie la orientación

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

Fondo

Tengo una aplicación con Admob SDK, para mostrar anuncios intersticiales (anuncios de pantalla completa).

Recientemente Google ha actualizado el SDK, junto con muchas otras cosas (herramientas de compilación, complemento de gradle, IDE, etc.), incluido admob (anuncios de firebase).

compile ''com.google.firebase:firebase-ads:11.4.2''

El problema

Después de actualizar, noté que cada vez que la aplicación intenta mostrar un anuncio intersticial, se bloquea.

El registro de bloqueo es como tal:

10-28 14:01:01.394 4523-4523/... I/Ads: Ad opening. 10-28 14:01:01.400 1606-2154/? E/ActivityManager: Activity Manager Crash. UID:10080 PID:4523 TRANS:63 java.lang.IllegalStateException: Only fullscreen activities can request orientation at com.android.server.am.ActivityRecord.setRequestedOrientation(ActivityRecord.java:2189) at com.android.server.am.ActivityManagerService.setRequestedOrientation(ActivityManagerService.java:4975) at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:1101) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2927) at android.os.Binder.execTransact(Binder.java:697) 10-28 14:01:01.403 4523-4523/... D/AndroidRuntime: Shutting down VM 10-28 14:01:01.406 4523-4523/... E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{.../com.google.android.gms.ads.AdActivity}: java.lang.IllegalStateException: Only fullscreen activities can request orientation

La cosa es que funcionó bien antes. Ahora no estoy seguro de qué causa que ocurra.

Al buscar en la web, no vi nada que hablara de "Solo las actividades a pantalla completa pueden solicitar orientación".

Lo que tenía en el manifiesto es algo un poco viejo, que tal vez ya no sea necesario:

<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent"/>

Digo que probablemente no sea necesario, porque ya no puedo verlo en los tutoriales, aunque recuerdo que lo hice en el pasado:

Lo que he intentado

  1. Traté de eliminar la entrada de manifiesto. Sigue siendo el mismo problema.

  2. Traté de configurar el tema para que fuera "@android: style / Theme.Translucent.NoTitleBar.Fullscreen" por la fuerza, pero tampoco me ayudó.

  3. Incluso pensé que podría ser porque actualmente tengo Android 8.1, pero cuando intenté usar la aplicación de Play Store, noté que funcionaba bien, sin fallas.

  4. Traté de volver a la versión 11.2.2 de admob y usar gradle v 2.3.3, pero tampoco me ayudó.

  5. Al probar un emulador con Android 7.0, funcionó bien con las últimas versiones de todo y la eliminación de toda la etiqueta de actividad de manifiesto.

  6. Traté de usar esto en el archivo gradle, en lugar de lo que usé:

    compile ''com.google.android.gms: play-services-ads: 11.4.2''

Todavía se bloqueó en mi dispositivo (Nexus 5x con Android 8.1) pero no se bloqueó en el emulador.

  1. Finalmente, traté de ejecutar la aplicación en el emulador con Android 8.1, y se bloqueó igual que en el dispositivo real.

  2. Informé sobre esto al equipo de Google Admob, así como al rastreador de problemas de Android . Espero que me respondan sobre esto.

Las preguntas

¿Cuál podría ser la causa de este problema?

¿Es por Android 8.1? Si es así, ¿cómo es que la versión anterior de la aplicación funcionó bien? Traté de revertir allí muchas versiones a las antiguas, pero aún así se bloqueó.

Y, lo más importante, ¿cómo puedo resolverlo?


Este problema se solucionará automáticamente cuando ad mob actualice sus sdk de anuncios para API 27, su dependencia de anuncios no es compatible con API 27, por lo que debido a este problema.

compile ''com.google.android.gms:play-services-ads:11.8.0''

Solo las actividades de pantalla completa pueden solicitar orientación, esto se debe a los metadatos de los anuncios en su archivo mainfest, admob debe actualizar su SDK para la versión 27.

si ha establecido la versión 27 de sdk de destino, obtendrá este error, en realidad Android actualiza sdk muy rápido, y algunas actualizaciones de admob quedan atrás para la integración con android sdk, por lo que admob tiene pendiente esta actualización, deberían hacerlo muy pronto , No es un problema del lado del desarrollador, si desea escapar de este bloqueo, configure su sdk en 26.


Parece que la actualización a:

com.google.firebase:firebase-ads:15.0.1

resolvió este problema por mí. Lo acabo de probar en Nexus 5X con 8.1.0 y los anuncios intersticiales de Admob funcionan ahora.

Solución más completa:

app.gradle de la aplicación:

... android { compileSdkVersion 27 buildToolsVersion ''27.0.3'' defaultConfig { ... targetSdkVersion 27 .. } } dependencies { ... implementation ''com.google.firebase:firebase-core:15.0.2'' implementation ''com.google.firebase:firebase-ads:15.0.1'' ... } apply plugin: ''com.google.gms.google-services''

nivel superior build.gradle:

buildscript { ... dependencies { ... classpath ''com.google.gms:google-services:3.3.0'' ... } } ...


Tuve el mismo bloqueo con Vungle SDK (que se incluyó a través de Appodeal SDK), por lo que esto no responde con precisión la pregunta relacionada con Admob SDK, pero en caso de que alguien obtenga esto con Vungle o Appodeal SDK:

Las versiones fueron las siguientes: Appodeal SDK - 2.4.2-220518 , Vungle SDK - 6.2.5 . Después de actualizar al SDK de Appodeal más nuevo en ese momento (versión 2.4.9-051218 ), se incluyó el SDK de Vungle más nuevo (versión 6.3.12 ) y el bloqueo ya no se produjo.


intenta agregar esto en tu manifiesto

<activity android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" tools:replace="android:theme" />

O, si está utilizando appcompat:

<style name="TranslucentTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> etc

Y en el manifiesto, asegúrese de que la actividad se declare con

android:theme="@style/TranslucentTheme"


no utilice ninguna propiedad en los archivos de manifiesto de Android AdActivity.

elimine esta línea de AdActivity en el archivo de manifiesto

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

Simplemente agregue esta línea siguiente al archivo de manifiesto de Android.

<activity android:name="com.google.android.gms.ads.AdActivity" />

Si desea establecer su actividad deseada como modo vertical, agregue esta línea siguiente a sus actividades en el método Crear:

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

Para Firebase ADS 17.0.0 y versiones superiores, use esta línea para manifestar el archivo.

<application ...........> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="@string/app_id" /> </application>

Puede obtener la identificación de la aplicación desde Admob -> Aplicaciones -> su aplicación -> Configuración de la aplicación -> Identificación de la aplicación. Copie y pegue este App_Id en su proyecto.


EDITAR

Ahora hay disponible una nueva versión de admob. Confirmo que con las últimas versiones (15.0.1 o más recientes) el problema ya no aparece, por lo que puede usar la última versión de Admob

com.google.firebase:firebase-ads:17.1.2

configurando la versión de destino a la última, si ha utilizado la solución sugerida anteriormente.

-------------------------------------------------- --------

Establezca el objetivo en el nivel de API de Android en 26 para solucionar el problema, esperando la actualización de Admob

En build.gradle

targetSdkVersion 26

si targetSdkVersion es> = 27 ( > android.os.Build.VERSION_CODES.O eso es 26) obtiene este error, han cambiado ActivityRecord en la última versión de Android agregando esto:

void setRequestedOrientation(int requestedOrientation) { if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen && appInfo.targetSdkVersion > O) { throw new IllegalStateException("Only fullscreen activities can request orientation"); .... }

El cambio se ha introducido en este commit

Evite que las actividades que no sean de pantalla completa influyan en la orientación Esta lista de cambios exige que las actividades dirigidas a O y más allá solo puedan especificar una orientación si son de pantalla completa.

y probablemente en admob lib he estropeado algún cheque