如何预加载AdMob插页式广告并使用意图发送到另一个Android活动

时间:2014-11-10 20:02:32

标签: android android-intent admob interstitial

我需要一些有关AdMob插页式广告的帮助。

我想在一个活动中预加载插页式广告。这是直截了当的。

// 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);

现在我想使用intent将插页式广告发送到另一个活动。我不知道如何使用

发送它
intent.putExtra("myAd", interstitialAd);

提前致谢。

5 个答案:

答案 0 :(得分:14)

插页式广告并不意味着或构建为像使用意图那样传递广告。附加功能。

更好
  • 重新创建&在下一个活动中重新加载广告
  • 制作一个包含插页式广告的额外公开课,将其放在活动A中并从活动B中的那里检索

第二种情况的例子(半伪代码):

public class AdManager {
    // Static fields are shared between all instances.
    static InterstitialAd ad;

    public AdManager() {
        createAd();
    }

    public void createAd() {
        // 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);
    }

    public InterstitialAd getAd() {
        return ad;
    }
}

使用

活动A

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

活动B

InterstitialAd ad = admanager.getAd();
if (ad.isLoaded) {
    ad.show();
}

答案 1 :(得分:4)

使用单例设计模式解决了这个问题。

/**
* Created by Kirk on 10/26/2017.
*/

public class AdManager {

private static AdManager singleton;

public AdManager() {
}

/***
 * returns an instance of this class. if singleton is null create an instance
 * else return  the current instance
 * @return
 */
public static AdManager getInstance() {
    if (singleton == null) {
        singleton = new AdManager();
    }

    return singleton;
}

/***
 * Create an interstitial ad
 * @param context
 */
public static void createAd(Context context) {
    interstitialAd = new InterstitialAd(context);
    interstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    interstitialAd.loadAd(new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build());
}

/***
 * get an interstitial Ad
 * @return
 */
public static InterstitialAd getAd() {
    return interstitialAd;
}

}

活动A中的

创建加载广告

    AdManager adManager = AdManager.getInstance();
    adManager.createAd(MainActivity.this);
活动B中的

通过

进行后退和展示广告
    AdManager adManager = AdManager.getInstance();
    InterstitialAd ad =  adManager.getAd();

    if (ad.isLoaded()) {
        ad.show();
    }

答案 2 :(得分:2)

InterstitialAd可以使用任何Context进行实例化,因此您可以在onCreate Application子类的AdManager期间对其进行实例化(并请求广告),然后在以后的任何位置展示广告你的代码。

这样,您可以在想要展示广告的时间内最大化广告加载的机会。

最好使用{{1}}(如另一个答案中所述),但没有必要这样做。

答案 3 :(得分:0)

答案 4 :(得分:0)

对于尝试蒂姆的答案却没有成功的人!

请勿两次制作广告!将构造函数更改为

    public AdManager(Context ctx) {
        this.ctx = ctx;
        //createAd(); //Remove this line! 
    }

最后,AdManager类应如下所示:

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;
    }
}

使用

活动A

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

活动B

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