如何通过其他活动调用showAd()

时间:2019-06-14 20:05:49

标签: android kotlin admob

我试图从另一个Activity类RewardedAd.kt调用MainActivity.kt中定义的runTheAd()方法

我只是遵循了本指南 Google Admob Doc

MainActivity.kt

中的功能
fun runTheAd(){
        if (mRewardedVideoAd.isLoaded) {
            mRewardedVideoAd.show()
        }else{
            loadRewardedVideoAd()
        }
    }

拨打 RewardAd.kt

getPoints.setOnClickListener{
            MainActivity().runTheAd()
        }

Erron Getting

   E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.takshaksh.layoutout, PID: 28485
        kotlin.UninitializedPropertyAccessException: lateinit property mRewardedVideoAd has not been initialized
            at com.takshaksh.layoutout.MainActivity.runTheAd(MainActivity.kt:56)
            at com.takshaksh.layoutout.RewardedAd$onCreate$1.onClick(RewardedAd.kt:20)

3 个答案:

答案 0 :(得分:0)

您需要先创建一个实例。之后调用show方法。

 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713")

    // Use an activity context to get the rewarded video instance.
    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this)
    mRewardedVideoAd.rewardedVideoAdListener = this
}

我记得您还需要在adMob端进行设置,以激活广告ID和清单的某些操作。因此,在此步骤的某处,连接无法正常工作,这就是为什么未创建实例且结果为错误的原因。

答案 1 :(得分:0)

由于您正在从另一个活动中调用该方法,因此第二个活动无法从MainActivity初始化mRewardedAd。因此您可以将初始化放入runTheAd方法中,但这不是最佳实践。

答案 2 :(得分:0)

您无法像这样创建和存储活动实例。相反,您只需使用

开始第二个活动
**startActivityForResult**(intent,101);

然后在您的第一个活动中只需覆盖

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check which request we're responding to
    if (requestCode == 101) {
        //here do start your ad when some condition is satisfied
    }
}

在您认为或仅满足某些条件的第二次活动中,只需致电

Intent intent = new Intent();
intent.putExtra("key", "I am done");
setResult(RESULT_OK, intent);

鉴于该活动位于堆栈中,这将在第一个活动中触发 onActivityResult 。您可以在其中编写开始广告的逻辑

第二个选项是创建一些本地广播,并再次使用这些意图与它们非常相似地接收它们。

您可以使用的第三个选项是事件总线,它在实现上也非常简单

在这里您可以阅读更多内容。

Really not getting setResult and onActivityResult

How to use LocalBroadcastManager?

https://github.com/greenrobot/EventBus