如何使用intent预加载AdMob中间广告并发送到另一个android活动
我需要一些关于AdMob中间广告的帮助 我想在一个活动中预装间质广告。这是直截了当的如何使用intent预加载AdMob中间广告并发送到另一个android活动,android,android-intent,admob,interstitial,Android,Android Intent,Admob,Interstitial,我需要一些关于AdMob中间广告的帮助 我想在一个活动中预装间质广告。这是直截了当的 // Create an ad. interstitialAd = new InterstitialAd(this); interstitialAd.setAdUnitId(AD_UNIT_ID); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdReq
// 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);
提前感谢。插播广告并非有意或无意通过意向书的附加内容来传播 最好是
- 在下一活动中重新创建并重新加载广告
- 制作一个额外的公共类来保存中间广告,将其放在活动A中,然后在活动B中从中检索它
AdManager adManager = new AdManager();
adManager.createAd();
AdManager adManager = new AdManager();
adManager.createAd();
活动B
AdManager adManager = new AdManager();
InterstitialAd ad = adManager.getAd();
if (ad.isLoaded()) {
ad.show();
}
AdManager adManager = new AdManager();
InterstitialAd ad = adManager.getAd();
if (ad.isLoaded()) {
ad.show();
}
interstitalad
可以使用任何上下文
进行实例化,这样您就可以在应用程序
子类的onCreate
期间实例化它(并请求ad),然后从代码中的任何位置显示ad
这样,你就最大限度地提高了广告在你想展示的时候被载入的机会
使用
AdManager(如另一个答案中所述)是一种很好的做法,但没有必要这样做。通过使用单例设计模式解决了这个问题
/**
* 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;
}
}
在activityA中创建加载广告
AdManager adManager = AdManager.getInstance();
adManager.createAd(MainActivity.this);
在活动B中,通过检索和显示广告
AdManager adManager = AdManager.getInstance();
InterstitialAd ad = adManager.getAd();
if (ad.isLoaded()) {
ad.show();
}
在此活动中,您可以使用异步方式预加载ad对象:
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;
}
}
int preLoad=preLoad.preLoad(new Loader());
Intent Intent=新的Intent(this,AnotherActivity.class);
意向。额外(“预验证”,预验证);
星触觉(意向);
//数据加载程序,预加载ad对象
类加载器实现数据加载器{
@凌驾
公共间隙加载数据(){
//创建一个广告对象。
interstitalad interstitalad=新的interstitalad(ThisActivity.this);
间质性setAdUnitId(AD_UNIT_ID);
AdRequest AdRequest=新建AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE\u ID\u仿真器)
.addTestDevice(测试设备ID).build();
//加载间隙ad。
间质负荷(adRequest);
返回间隙翼;
}
}
在OtherActivity中,您可以通过以下方式获取ad对象:
PreLoader.listenData(preLoaderId, new Listener());
//after ad load completed,DataListener.onDataArrived(...) will be called to process data
class Listener implements DataListener<InterstitialAd> {
@Override
public void onDataArrived(InterstitialAd ad) {
//do sth with ad object
//destroy this PreLoader by id if you don`t need it anymore
PreLoader.destroy(preLoaderId);
}
}
preload.listenData(preforerid,newlistener());
//ad加载完成后,将调用DataListener.onDataArrived(…)来处理数据
类侦听器实现DataListener{
@凌驾
已到达的公共空间(中间空间ad){
//以不正当的目的做某事
//如果您不再需要,请按id销毁此预加载程序
预加载。销毁(预加载);
}
}
希望这有帮助。对于尝试过Tim答案但没有成功的人
不要创建广告两次!将构造函数更改为
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();
AdManager adManager = new AdManager();
adManager.createAd();
活动B
AdManager adManager = new AdManager();
InterstitialAd ad = adManager.getAd();
if (ad.isLoaded()) {
ad.show();
}
AdManager adManager = new AdManager();
InterstitialAd ad = adManager.getAd();
if (ad.isLoaded()) {
ad.show();
}
谢谢你,蒂姆。。但是在活动B中,我必须创建并初始化“admanager”,然后我将无法调用getAd();你可以通过制作一个静态广告来规避这个问题,见我的Editi Tim。。你的代码不起作用。。构造函数未定义。。请修复它。@AriefRivai哪个构造器hi Tim,希望你还在看这个。上面的代码不完整。我无法添加行INTERTINCALAD=新INTERTINCALAD(此);没有类“扩展上下文”。如果我让类扩展上下文,那么我也被迫将其抽象化,然后我们会遇到各种各样的问题。我可以用什么来代替问题行中的“这个”,我正在尝试的任何东西都不起作用。谢谢。holdInterstitalad
在哪里?