Search code examples
androidandroid-intentadmobinterstitial

How To preload AdMob interstitial ad and send to another android activity using intent


I need some help regarding AdMob interstitial ad.

I want to preload the interstitial ad in one activity. this is straight forward.

// Create an ad.
        interstitialAd = new InterstitialAd(this);
        interstitialAd.setAdUnitId(AD_UNIT_ID);

        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .addTestDevice(TEST_DEVICE_ID).build();

        // Load the interstitial ad.
        interstitialAd.loadAd(adRequest);

Now I want to send the interstitial Ad to another activity using intent. I don't know how to send it using

intent.putExtra("myAd", interstitialAd);

Thanks in advance.


Solution

  • Interstitial ads are not meant or built to be passed around like that using intents' extras.

    It's better to

    • recreate & reload an ad in the next activity
    • make an extra public class that holds the interstitial ad, put it there in activity A and retrieve it from there in activity B

    Example for 2nd case (semi pseudo code):

    public class AdManager {
        // Static fields are shared between all instances.
        static InterstitialAd ad;
        private Context ctx;
    
        public AdManager(Context ctx) {
            this.ctx = ctx;
            createAd();
        }
    
        public void createAd() {
            // Create an ad.
            ad = new InterstitialAd(ctx);
            ad.setAdUnitId(AD_UNIT_ID);
    
            final AdRequest adRequest = new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .addTestDevice(TEST_DEVICE_ID).build();
    
            // Load the interstitial ad.
            ad.loadAd(adRequest);
        }
    
        public InterstitialAd getAd() {
            return ad;
        }
    }
    

    Using

    Activity A

    AdManager adManager = new AdManager();
    adManager.createAd();
    

    Activity B

    AdManager adManager = new AdManager();
    InterstitialAd ad = adManager.getAd();
    if (ad.isLoaded()) {
        ad.show();
    }