[英]Ads in Android Daydream/DreamService?
有没有人知道任何Android广告SDK是否适用于新的DreamService功能? 我尝试使用AdMob,并首先看到Interstitial类构造函数显式需要一个Activity。 我看到AdView有一个构造函数,只需要一个上下文,所以我尝试了,但得到一个运行时异常告诉我问题是我正在尝试使用除Activity之外的上下文来扩充AdView。 我查看了尝试亚马逊移动广告API,但它看起来与AdMob相同。
我试图发挥创意,从我的DreamService开始创建插页式广告的另一个活动,但它是在DreamService用户界面后创建的(有点理智,因为Daydream覆盖了所有内容)。 有没有人知道在Daydream中使用广告的任何解决方案?
我想出了解决这个问题的东西,尽管我仍然不喜欢这个解决方案。 如果有人知道的话,欢迎采用更优雅的方法。
我所做的是使用mMedia SDK而不是AdMob。 他们的非页内广告和AdView类都可以在构造函数中使用Context而不是Activity。 由于它在Dream叠加层后面打开,因此插页式广告仍然无法解决。 所以我最终做的是在我的Dream的XML布局中添加AdView,然后将其可见性设置为View.GONE,直到我想要显示它。 当我需要显示广告时,我将其设置为View.VISIBLE。
我遇到的另一个问题是,在点击AdView后,它会使用广告的网址启动浏览器,这当然会在Dream背后打开,从而无法展示广告。 所以我最终将Dream设置为交互式,捕获onTouchEvent,然后如果点击发生时广告是可见的,请调用Ad的callOnClick方法。 我还必须将Ad的RequestListener设置为我的Dream Service并实现MMAdOverlayLaunched方法,该方法在广告启动浏览器时调用。 在这个方法中,我只是调用finish()来停止Dream并让浏览器显示广告。
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
// Exit dream upon user touch
setInteractive(true);
// Hide system UI
setFullscreen(true);
// Set the dream layout
setContentView(R.layout.dream_layout);
//Initialize Ads
this.initAdvertising();
}
private void initAdvertising(){
MMSDK.initialize(this);
mDreamAd = (MMAdView) findViewById(R.id.adView);
//Separate thread will handle showing the ad
mDreamAd.setVisibility(View.GONE);
mAdRequest = new MMRequest();
//TODO add metadata to Request
mDreamAd.setMMRequest(mAdRequest);
mDreamAd.setListener(this);
mDreamAd.getAd();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event){
super.dispatchTouchEvent(event);
if(mDreamAd != null && mDreamAd.isShown()){
mDreamAd.callOnClick();
}
return true;
}
@Override
public void MMAdOverlayLaunched(MMAd ad) {
//Finish so we can display the ad the user has clicked
if(ad.equals(this.mDreamAd))
this.finish();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.