我需要一些有关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);
提前致谢。
答案 0 :(得分:14)
插页式广告并不意味着或构建为像使用意图那样传递广告。附加功能。
更好
第二种情况的例子(半伪代码):
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)
在ThisActivity中,您可以异步预加载PreLoader的广告对象:
find | sort | tar -cvzf _backup.tar.gz -T -
在OtherActivity中,您可以通过以下方式获取广告对象:
int preLoaderId = PreLoader.preLoad(new Loader());
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("preLoaderId", preLoaderId);
startActivity(intent);
//DataLoader, pre-load ad object
class Loader implements DataLoader<InterstitialAd> {
@Override
public InterstitialAd loadData() {
// Create an ad object.
InterstitialAd interstitialAd = new InterstitialAd(ThisActivity.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);
return interstitialAd;
}
}
希望这有用。
答案 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();
}