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

如何在LibGDX游戏中集成AdMob插屏广告及适配对应Activity

插屏广告实现方案(适配新版AdMob+LibGDX)

你的代码存在两个核心问题:空指针风险(回调设置时机错误)和加载逻辑缺失,同时对show()方法的Activity参数存在误解,以下是完整修复方案:

核心修复点

1. 调整回调绑定时机

不能在广告加载前直接给mInterstitialAd设置回调,此时mInterstitialAd还是null,必然触发空指针。必须在onAdLoaded回调中(广告成功加载后)再绑定全屏内容回调。

2. 正确传递Activity参数

AndroidLauncher继承自AndroidApplication,而AndroidApplication本身就是Activity子类,直接传递AndroidLauncher.this即可满足show()方法的参数要求。

3. 完善广告加载逻辑

loadInterstitialAd()方法需要实现完整的广告加载流程,同时在广告关闭/展示失败后自动加载下一个广告,保证后续有广告可用。

修改后的完整代码

public class AndroidLauncher extends AndroidApplication implements AdsController  {

    InterstitialAd mInterstitialAd;
    private static final String TAG = "AndroidLauncher";
    // 测试用插屏广告ID,正式环境替换为你的自有ID
    private static final String INTERSTITIAL_AD_ID = "ca-app-pub-3940256099942544/1033173712";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // 保留原有Banner广告的布局与游戏视图初始化逻辑
        RelativeLayout layout = new RelativeLayout(this);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        View gameView = initializeForView(new mygame(this), config);
        layout.addView(gameView);

        // 初始化AdMob SDK
        MobileAds.initialize(this, initializationStatus -> {});
        
        // 首次加载插屏广告
        loadInterstitialAd();

        setContentView(layout);
    }

    @Override
    public void loadInterstitialAd() {
        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(this, INTERSTITIAL_AD_ID, adRequest, new InterstitialAdLoadCallback() {
            @Override
            public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                mInterstitialAd = interstitialAd;
                Log.i(TAG, "插屏广告加载完成");
                
                // 加载成功后绑定全屏回调
                mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                    @Override
                    public void onAdDismissedFullScreenContent() {
                        Log.d(TAG, "插屏广告已关闭");
                        mInterstitialAd = null;
                        // 自动加载下一个广告
                        loadInterstitialAd();
                    }

                    @Override
                    public void onAdFailedToShowFullScreenContent(AdError adError) {
                        Log.e(TAG, "插屏广告展示失败: " + adError.getMessage());
                        mInterstitialAd = null;
                        loadInterstitialAd();
                    }

                    @Override
                    public void onAdShowedFullScreenContent() {
                        Log.d(TAG, "插屏广告正在展示");
                    }
                });
            }

            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                Log.e(TAG, "插屏广告加载失败: " + loadAdError.getMessage());
                mInterstitialAd = null;
            }
        });
    }

    @Override
    public void showInterstitialAd() {
        runOnUiThread(() -> {
            if (mInterstitialAd != null) {
                // 传递当前Activity实例
                mInterstitialAd.show(AndroidLauncher.this);
            } else {
                Log.w(TAG, "无可用插屏广告,尝试重新加载");
                loadInterstitialAd();
            }
        });
    }
}

额外注意事项

  • 确保build.gradle中引入最新版AdMob依赖,例如com.google.android.gms:play-services-ads:22.6.0或更高版本
  • 测试阶段必须使用Google提供的测试广告ID,避免触发AdMob风控限制
  • 游戏逻辑中调用showInterstitialAd()时,选择合理的触发时机(如关卡结束、游戏重启等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:13