正如我在问题标题中提到的,我试图在一定时间后(例如每 30 秒后)显示广告。我这样做是因为我使用的是WebView,所以在WebView中我不知道是否有办法通过正在Android Webview中加载的网站来控制admob广告。下面是我的代码
MainActivity.java
现在广告正在显示,但仅在应用程序启动时以及没有广告后显示,所以我只是每隔 30 秒显示一次
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
//AdView mAdView;
//mAdView = findViewById(R.id.adView);
//AdRequest bannerRequest = new AdRequest.Builder().build();
//mAdView.loadAd(bannerRequest);
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this,"ca-app-pub-123256789123456/1234567890", adRequest,
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
interstitialAd.show(MainActivity.this);
interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
super.onAdFailedToShowFullScreenContent(adError);
}
@Override
public void onAdShowedFullScreenContent() {
super.onAdShowedFullScreenContent();
}
@Override
public void onAdDismissedFullScreenContent() {
super.onAdDismissedFullScreenContent();
}
@Override
public void onAdImpression() {
super.onAdImpression();
}
@Override
public void onAdClicked() {
super.onAdClicked();
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
}
});
我通过互联网找到了这段代码作为解决方案,但我不知道相同的代码是否适用于我的情况,或者代码中是否需要进行任何更改,最后我应该将该代码放在哪里:
interstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
MainActivity.this.interstitialAd.show();
}
}, 5000);
}
});
要在一定时间间隔后展示广告,您可以使用 Handler 来安排广告展示。根据您的情况,您可以按如下方式修改代码:
// Declare these variables at the beginning of your activity
private InterstitialAd interstitialAd;
private Handler adHandler;
private static final long AD_DELAY = 30000; // 30 seconds in milliseconds
// Initialize your ad in onCreate or wherever is appropriate
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus) {
}
});
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this, "ca-app-pub-
123256789123456/1234567890",adRequest, new InterstitialAdLoadCallback()
{
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
MainActivity.this.interstitialAd = interstitialAd;
// Schedule ad display after a delay
adHandler = new Handler();
adHandler.postDelayed(new Runnable() {
public void run() {
if (MainActivity.this.interstitialAd != null) {
MainActivity.this.interstitialAd.show(MainActivity.this);
}
}
}, AD_DELAY);
interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
// Your callback methods here
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
}
});
此代码安排广告在 30 秒延迟后显示。您应该将此代码放置在 onCreate 方法中或任何适合应用程序流程的位置。一旦 InterstitialAd 加载并且处理程序在指定的延迟后触发,它将显示广告。
请记住在 Activity 的生命周期中正确管理 adHandler 和 interstitialAd 变量,以避免在 Activity 或 Fragment 之间导航时出现内存泄漏或问题。