You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击按钮跳转下一个Activity时如何正常展示插屏广告

问题根因

当前代码的点击事件中,showInterAd() 和跳转下页的startActivity()是并行执行的,调用展示广告的方法后,下一个Activity立刻启动并覆盖当前窗口,广告还没完成渲染展示就被压到后台,所以只有返回回到MainActivity时广告才会弹出。

修复方案
  • 移除点击事件中直接跳转的逻辑,将跳转操作放到广告的回调方法中,保证广告关闭/展示失败后再执行页面跳转
  • 修正广告关闭回调的跳转目标,原回调中跳回MainActivity的逻辑不符合需求
  • 广告展示完成后重新加载下一次插屏广告,保证后续点击可以正常展示
修改后核心代码
class MainActivity : AppCompatActivity() {
    lateinit var mAdView : AdView
    private var mInterstitialAd: InterstitialAd? = null
    // 声明跳转目标页常量,避免重复编写
    private val targetActivityCls = com.tango.changapp.wLista::class.java

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadBannerAd()
        loadInterAd()
        val wLista = findViewById<Button>(R.id.Lista)
        wLista.setOnClickListener{
            // 移除直接跳转逻辑,仅调用广告展示方法
            showInterAd()
        }
    }

    private fun showInterAd() {
        if(mInterstitialAd != null){
            mInterstitialAd?.fullScreenContentCallback = object : FullScreenContentCallback(){
                override fun onAdFailedToShowFullScreenContent(p0: AdError) {
                    super.onAdFailedToShowFullScreenContent(p0)
                    // 广告展示失败也执行跳转,避免用户卡住
                    jumpToTarget()
                    // 重新加载下一次广告
                    loadInterAd()
                }

                override fun onAdDismissedFullScreenContent() {
                    super.onAdDismissedFullScreenContent()
                    // 用户关闭广告后跳转目标页
                    jumpToTarget()
                    // 重新加载下一次广告
                    loadInterAd()
                }
            }
            mInterstitialAd?.show(this)
        }else{
            // 广告未加载完成,直接跳转
            jumpToTarget()
        }
    }

    // 封装跳转逻辑,复用代码
    private fun jumpToTarget() {
        startActivity(Intent(this, targetActivityCls))
    }

    private fun loadInterAd() {
        val adRequest = AdRequest.Builder().build()
        InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest, object : InterstitialAdLoadCallback() {
            override fun onAdFailedToLoad(adError: LoadAdError) {
                mInterstitialAd = null
            }
            override fun onAdLoaded(interstitialAd: InterstitialAd) {
                mInterstitialAd = interstitialAd
            }
        })
    }

    // 原有loadBannerAd等其他逻辑保持不变
}

内容的提问来源于stack exchange,提问作者iFroxt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:48:02