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

Flutter Android 12:如何在系统默认启动页显示Admob开屏广告

Android 12 Flutter 系统启动页集成Admob开屏广告方案

核心思路

直接在Android原生系统启动页中集成Admob开屏广告,通过原生代码控制广告展示逻辑,确保广告结束后再进入Flutter主页面,避免广告提前跳转。


步骤1:修改Android启动页布局

找到Android项目中res/layout/launch_screen.xml(或对应启动页布局文件),添加Admob广告容器:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/your_splash_background">

    <!-- 原有启动页元素(如应用图标) -->
    <ImageView
        android:id="@+id/app_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_launcher" />

    <!-- Admob开屏广告容器 -->
    <com.google.android.gms.ads.AdView
        android:id="@+id/splash_ad_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="你的开屏广告ID" />

</RelativeLayout>

步骤2:配置Admob依赖与权限

在Android项目的app/build.gradle中添加Admob依赖:

dependencies {
    // 其他依赖
    implementation 'com.google.android.gms:play-services-ads:22.4.0'
}

在AndroidManifest.xml中添加Admob应用ID和网络权限:

<uses-permission android:name="android.permission.INTERNET" />

<application>
    <!-- 其他配置 -->
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>

步骤3:修改启动页Activity逻辑

找到负责展示启动页的SplashActivity(若无则新建),实现广告加载与展示控制:

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.interstitial.InterstitialAd;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;

public class SplashActivity extends AppCompatActivity {
    private InterstitialAd mInterstitialAd;
    private static final long SPLASH_TIMEOUT = 3000; // 广告加载超时时间

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.launch_screen);

        // 加载开屏广告
        loadInterstitialAd();

        // 超时兜底:广告加载失败时直接进入主页面
        new Handler().postDelayed(() -> {
            if (mInterstitialAd == null) {
                startMainActivity();
            }
        }, SPLASH_TIMEOUT);
    }

    private void loadInterstitialAd() {
        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(
            this,
            "你的开屏广告ID", // 使用Admob插屏广告ID作为开屏广告
            adRequest,
            new InterstitialAdLoadCallback() {
                @Override
                public void onAdLoaded(InterstitialAd interstitialAd) {
                    mInterstitialAd = interstitialAd;
                    showAd();
                }

                @Override
                public void onAdFailedToLoad(com.google.android.gms.ads.LoadAdError loadAdError) {
                    mInterstitialAd = null;
                    startMainActivity();
                }
            }
        );
    }

    private void showAd() {
        if (mInterstitialAd != null) {
            mInterstitialAd.show(SplashActivity.this);
            // 监听广告关闭事件,确保广告结束后再进入主页面
            mInterstitialAd.setFullScreenContentCallback(new com.google.android.gms.ads.FullScreenContentCallback() {
                @Override
                public void onAdDismissedFullScreenContent() {
                    super.onAdDismissedFullScreenContent();
                    startMainActivity();
                }

                @Override
                public void onAdFailedToShowFullScreenContent(com.google.android.gms.ads.AdError adError) {
                    super.onAdFailedToShowFullScreenContent(adError);
                    startMainActivity();
                }
            });
        } else {
            startMainActivity();
        }
    }

    private void startMainActivity() {
        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

步骤4:调整Flutter端配置

移除Flutter代码中所有自定义启动页相关逻辑,确保MainActivity为Flutter应用的默认入口。

关键注意事项

  • 测试阶段使用Admob官方测试ID,避免触发广告政策违规。
  • Android 12需确保应用已适配目标SDK版本,避免权限或启动模式冲突。
  • 务必保留超时逻辑,防止网络异常导致应用卡在启动页。

内容的提问来源于stack exchange,提问作者hardik koladiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:22:16