如果已经加载,如何避免加载 Admob 插页式广告?
How to Avoid Loading Admob Interstitial Ad if One is Already Loaded?
我在 baseactivity 的 oncreate 方法中加载插页式广告,这个 baseactivity 被应用程序的所有其他活动扩展,所以每次我开始一个新的 activity正在加载一个新的插页式广告,即使已经加载了一个。
private InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createAd();
}
public void createAd () {
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(BaseActivity.this, "ca-app-pub-3940256099942544/8691691433", adRequest, new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
Toast.makeText(BaseActivity.this, "Ad Loaded",
Toast.LENGTH_LONG).show();
mInterstitialAd = interstitialAd;
mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
@Override
public void onAdDismissedFullScreenContent() {
// Called when fullscreen content is dismissed.
Toast.makeText(BaseActivity.this, "fullscreen content is dismissed.",
Toast.LENGTH_LONG).show();
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Called when fullscreen content failed to show.
Toast.makeText(BaseActivity.this, "fullscreen content failed to show.",
Toast.LENGTH_LONG).show();
}
@Override
public void onAdShowedFullScreenContent() {
// Called when fullscreen content is shown.
// Make sure to set your reference to null so you don't
// show it a second time.
mInterstitialAd = null;
Toast.makeText(BaseActivity.this, "fullscreen content is shown.",
Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
Toast.makeText(BaseActivity.this, "Ad Failed to Load",
Toast.LENGTH_LONG).show();
}
});
}
如何在第一次创建基础 activity 时只加载一次?
在你的代码中,扩展基础 activity 的每个 activity 包含它自己的 InterstitialAd
的 实例 ,如果你认为如果你创建基础 activity 所以 InterstitialAd
将在你所有的活动中共享你错了(阅读继承)。
一个快速的破解方法是创建 InterstitialAd
static
,更好的方法是创建单例 class 或包含 InterstitialAd
,甚至您可以附加 InterstitialAd
到您的应用程序 class,它本身就是一个实例。
我在 baseactivity 的 oncreate 方法中加载插页式广告,这个 baseactivity 被应用程序的所有其他活动扩展,所以每次我开始一个新的 activity正在加载一个新的插页式广告,即使已经加载了一个。
private InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createAd();
}
public void createAd () {
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(BaseActivity.this, "ca-app-pub-3940256099942544/8691691433", adRequest, new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
Toast.makeText(BaseActivity.this, "Ad Loaded",
Toast.LENGTH_LONG).show();
mInterstitialAd = interstitialAd;
mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
@Override
public void onAdDismissedFullScreenContent() {
// Called when fullscreen content is dismissed.
Toast.makeText(BaseActivity.this, "fullscreen content is dismissed.",
Toast.LENGTH_LONG).show();
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Called when fullscreen content failed to show.
Toast.makeText(BaseActivity.this, "fullscreen content failed to show.",
Toast.LENGTH_LONG).show();
}
@Override
public void onAdShowedFullScreenContent() {
// Called when fullscreen content is shown.
// Make sure to set your reference to null so you don't
// show it a second time.
mInterstitialAd = null;
Toast.makeText(BaseActivity.this, "fullscreen content is shown.",
Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
Toast.makeText(BaseActivity.this, "Ad Failed to Load",
Toast.LENGTH_LONG).show();
}
});
}
如何在第一次创建基础 activity 时只加载一次?
在你的代码中,扩展基础 activity 的每个 activity 包含它自己的 InterstitialAd
的 实例 ,如果你认为如果你创建基础 activity 所以 InterstitialAd
将在你所有的活动中共享你错了(阅读继承)。
一个快速的破解方法是创建 InterstitialAd
static
,更好的方法是创建单例 class 或包含 InterstitialAd
,甚至您可以附加 InterstitialAd
到您的应用程序 class,它本身就是一个实例。