Admob Interstitial关闭现有活动

时间:2017-02-17 08:25:29

标签: android android-fragments admob

当我显示Admob插页式广告时,它显示正常,我已经注册了一个侦听器来捕获onAdClosed事件,但问题是我实际上无法执行任何与我的UI交互的事件,因为插页式广告已关闭它所有。

我正在创建这样的插页式广告:

    storyAd = new InterstitialAd(this);
    storyAd.setAdUnitId("ca-app-pub-xxxxxxxxxxxxxxxx");
    storyAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            super.onAdClosed();
            storyAd.loadAd(buildAdRequest());
            if (prevMusicPlaying) {
                toggleAudio();
            }
            loadNextPage();
        }
    });
    storyAd.loadAd(buildAdRequest());

我的清单中也有它:

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

loadNextPage()调用崩溃,因为它试图创建一个新片段并将其添加到我的活动中,但由于插页式广告暂停了活动,因此无法执行此操作。所以我得到了这个例外:

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
                      at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1328)
                      at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1346)
                      at android.app.FragmentManagerImpl.popBackStack(FragmentManager.java:488)

我如何才能使InterstitialAd不会以任何方式干扰现有用户界面。花了很长时间才能让现有的UI处理各种活动/片段陷阱。

2 个答案:

答案 0 :(得分:1)

您可能在显示插页式广告之前完成当前活动,然后依靠插页式广告回调移至下一页或屏幕

这是不好的做法,因为您不希望自己的应用流程依赖广告回调。可能存在广告无法展示的情景

您需要做的是致电

loadNextPage();

在您展示广告之前。当广告显示时,它会简单地通过应用屏幕,如果有广告,它将会接管,否则不会影响应用

答案 1 :(得分:0)

所以,答案不太理想,但确实有效。

您可以在onAdClosed()中更新数据模型,但不能更新与UI相关的任何内容。设置一个标记,表示广告已关闭或您需要执行的操作。

然后在主Activity上的onResume()中,更新UI。您可以从onAdClosed()或其他任何内容检查标志,然后更新GUI以反映新状态。