有没有人知道任何Android广告SDK是否适用于新的DreamService功能?我尝试使用AdMob,并首先看到Interstitial类构造函数显式需要一个Activity。我看到AdView有一个构造函数,只需要一个上下文,所以我尝试了,但得到一个运行时异常告诉我问题是我正在尝试使用除Activity之外的上下文来扩充AdView。我查看了尝试亚马逊移动广告API,但它看起来与AdMob相同。
我试图发挥创意并从我的DreamService中创建另一个创建插页式广告的活动,但它是在DreamService用户界面后创建的(有点理智,因为Daydream覆盖了所有内容)。有没有人知道在Daydream中使用广告的任何解决方案?
答案 0 :(得分:2)
我想出了解决这个问题的东西,尽管我仍然不喜欢这个解决方案。如果有人知道的话,欢迎采用更优雅的方法。
我所做的是使用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();
}