Как начать второе действие, когда объявление закрыто? (Котлин)

#android #kotlin #ads

Вопрос:

В моем приложении пользователь запускается в основной активности. При нажатии на кнопку (btn) появляется промежуточное объявление. Я хочу, чтобы он перешел во вторую активность, когда объявление будет закрыто, но он просто вернется к основной активности. Я вставил свой код ниже

 class MainActivity : AppCompatActivity() {
private var mInterstitialAd: InterstitialAd? = null
val i:Intent = Intent(this, SecoundActivity::class.java)


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    MobileAds.initialize(this) {}
    var 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?.fullScreenContentCallback = object:FullScreenContentCallback() {
                override fun onAdDismissedFullScreenContent() {
                    startActivity(i)
                }
            }
            mInterstitialAd = interstitialAd
        }
    })

    btn.setOnClickListener {
        if (mInterstitialAd != null) {
            mInterstitialAd?.show(this)

        }
    }
}
 

}

Любой способ решить эту проблему. Спасибо

Ответ №1:

Поскольку ваш объект может mInterstitialAd быть обнулен, FullScreenContentCallback он никогда не будет инициализирован, потому mInterstitialAd что он равен нулю, когда вы пытаетесь его вызвать. Он будет выполнен до onAdLoaded того, как будет вызван.

Поместите обратный вызов полноэкранного содержимого в обратный вызов onAdLoaded следующим образом

     override fun onAdLoaded(interstitialAd: InterstitialAd) {
        interstitialAd.fullScreenContentCallback = object:FullScreenContentCallback() {
            override fun onAdDismissedFullScreenContent() {
                startActivity(i)
            }
        }
        mInterstitialAd = interstitialAd  
    }
 
 

Кроме того, рекомендуется помещать инициализацию переменных в верхнюю часть класса, а не в нижнюю

 private var mInterstitialAd: InterstitialAd? = null
private val i = Intent(this, SecondActivity::class.java)
 

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

1. Я добавил ваш код в действие. Тем не менее, приложение по-прежнему перенаправляет обратно в основную активность, когда объявление закрыто. Об обновленном коде идет речь.

2. Вы не добавили мой точный код. Проверьте еще раз. Заменить мИнтерститиалАд? .fullScreenContentCallback с InterstitialAd.fullScreenContentCallback ваш mInterstitialAd по-прежнему равен нулю, потому что вы назначаете его впоследствии ..