Android Daydream / DreamService中的广告?

时间:2013-07-19 00:17:05

标签: android ads dreamservice

有没有人知道任何Android广告SDK是否适用于新的DreamService功能?我尝试使用AdMob,并首先看到Interstitial类构造函数显式需要一个Activity。我看到AdView有一个构造函数,只需要一个上下文,所以我尝试了,但得到一个运行时异常告诉我问题是我正在尝试使用除Activity之外的上下文来扩充AdView。我查看了尝试亚马逊移动广告API,但它看起来与AdMob相同。

我试图发挥创意并从我的DreamService中创建另一个创建插页式广告的活动,但它是在DreamService用户界面后创建的(有点理智,因为Daydream覆盖了所有内容)。有没有人知道在Daydream中使用广告的任何解决方案?

1 个答案:

答案 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();

}