Приложение для Android с рекламным баннером уничтожается при изменении ориентации

#android #kotlin #rotation #admob

#Android #kotlin #вращение #admob

Вопрос:

Я новичок в создании мобильных приложений и пытаюсь добавить рекламный баннер в свое первое приложение. До сих пор я использовал тестовое объявление, и оно прекрасно работает в портретной и альбомной ориентации.

Но когда я использую свой настоящий AdUnitId, что-то идет не так. Реклама видна в портретном режиме, но когда я хочу повернуть экран, появляется информация о том, что, к сожалению, мое приложение остановлено. Что любопытно, так происходит не всегда. Иногда это работает идеально.

Я хотел бы добавить, что когда я все делал с инструкциями по внедрению от AdMob.

У вас есть какие-нибудь идеи, как это исправить?

@Ircover, @EzequielAdrian Вот мой AndroidManifest.xml файл:

 <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            android:fullBackupContent="true">
        <activity android:name=".MainActivity2">
        </activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts"/>

        <meta-data
                android:name="com.google.android.gms.ads.APPLICATION_ID"
                android:value="ca-app-pub-some_numbers~some_numbers"/>

    </application>
 

Вот фрагмент из activity_main.xml с рекламным баннером:

 <com.google.android.gms.ads.AdView
            android:id="@ id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            app:adSize="BANNER"
            app:adUnitId="ca-app-pub-6404370649958393/3303930979"
            app:layout_constraintTop_toBottomOf="@ id/button1"
            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.494"
            app:layout_constraintVertical_bias="0.672">
    </com.google.android.gms.ads.AdView>
 

Вот фрагмент MainActivity.kt:

 class MainActivity : AppCompatActivity() {
    lateinit var mAdView : AdView

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MobileAds.initialize(this) {}
        mAdView = findViewById(R.id.adView)
        val adRequest = AdRequest.Builder().build()
        mAdView.loadAd(adRequest)
    }
}

 

Как это выглядит до поворота, и после вращения.

@Ircover, вот журналы из Logcat:

 12-08 15:11:04.266 18313-18390/rand.random.randomizer E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
12-08 15:11:04.290 18313-18390/rand.random.randomizer E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
12-08 15:11:04.305 18313-18390/rand.random.randomizer E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
12-08 15:11:04.318 18313-18390/rand.random.randomizer E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
12-08 15:11:04.332 18313-18390/rand.random.randomizer E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
12-08 15:11:04.357 18313-18313/rand.random.randomizer W/ResourceType: No package identifier when getting value for resource number 0x00000001
12-08 15:11:04.360 18313-18313/rand.random.randomizer D/AndroidRuntime: Shutting down VM
12-08 15:11:04.362 18313-18313/rand.random.randomizer E/AndroidRuntime: FATAL EXCEPTION: main
    Process: rand.random.randomizer, PID: 18313
    java.lang.RuntimeException: Unable to start activity ComponentInfo{rand.random.randomizer/rand.random.randomizer.MainActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x1
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3912)
        at android.app.ActivityThread.access$900(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x1
        at android.content.res.Resources.getValue(Resources.java:1233)
        at androidx.appcompat.widget.ResourceManagerInternal.loadDrawableFromDelegates(ResourceManagerInternal.java:252)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:139)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)
        at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
        at androidx.appcompat.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:86)
        at androidx.appcompat.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:94)
        at rand.random.randomizer.MainActivity.onCreate(MainActivity.kt:32)
        at android.app.Activity.performCreate(Activity.java:5937)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3912) 
        at android.app.ActivityThread.access$900(ActivityThread.java:144) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5221) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:69412-08 15:11:10.358 18313-18390/rand.random.randomizer D/EGL_emulation: eglMakeCurrent: 0xa2afd100: ver 2 0 (tinfo 0xa2adb6a0)
 

Комментарии:

1. Можете ли вы опубликовать сообщение об ошибке? Без подробностей мы едва ли сможем вам помочь.

2. покажите, пожалуйста, какой-нибудь код.

3. Нам нужно знать, что пошло не так, поэтому, пожалуйста, опубликуйте сведения об исключении. Вы можете найти его в Logcat сразу после сбоя приложения.

Ответ №1:

Возможно, вам потребуется переопределить метод onConfigurationChanged и написать коды, чтобы обновить там добавить представление.