0

有谁知道任何 Android 广告 SDK 是否与新的 DreamService 功能一起使用?我尝试使用 AdMob 并首先看到 Interstitial 类构造函数明确需要一个 Activity。我看到 AdView 有一个只需要上下文的构造函数,所以我尝试了一下,但是遇到了一个运行时异常,告诉我问题是我正在尝试使用 Activity 以外的上下文来膨胀 AdView。我考虑尝试使用 Amazon Mobile Ads API,但它看起来与 AdMob 相同。

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

4

1 回答 1

2

我想出了解决这个问题的方法,尽管我仍然不太喜欢这个解决方案。如果有人知道,将欢迎一种更优雅的方法。

我所做的是使用 mMedia SDK 而不是 AdMob。它们的 Interstitial 和 AdView 类都可以在构造函数中使用 Context 而不是 Activity。Interstitial 对我来说仍然没有效果,因为它在 Dream 叠加层后面打开。所以我最终做的是在 Dream 的 XML 布局中添加一个 AdView,然后将其可见性设置为 View.GONE,直到我想显示它。当需要显示广告时,我将其设置为 View.VISIBLE。

我遇到的另一个问题是,在单击 AdView 后,它会启动带有广告 URL 的浏览器,这当然会在 Dream 后面打开,从而违背了展示广告的目的。所以我最终将 Dream 设置为交互式,捕获了 onTouchEvent,然后如果在点击发生时广告是可见的,则调用广告的 callOnClick 方法。我还必须将广告的 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();

}
于 2013-07-21T13:55:22.127 回答