2013-07-19 38 views
0

有誰知道是否有任何Android廣告SDK可以使用新的DreamService功能?我嘗試過使用AdMob,並首先看到Interstitial類構造函數明確需要一個Activity。我看到AdView有一個構造函數,它只是需要一個上下文,所以我嘗試了一下,但得到了一個運行時異常,告訴我問題在於我試圖使用Activity之外的上下文來擴展AdView。我考慮嘗試亞馬遜移動廣告API,但看起來與AdMob相同。Android Daydream/DreamService中的廣告?

我試圖讓我的DreamService創建另一個Activity來創建一個插頁式廣告,但是它是在DreamService UI背後創建的(自Daydream覆蓋了所有內容以後,這些內容纔有意義)。有誰知道在Daydream中使用廣告的任何解決方案嗎?

+0

這是否最終運行良好?金錢/技術上?我的印象是,這不會被認爲是電池/ UX的好處。 – you786

回答

2

我想出了一些解決此問題的東西,但我仍然不太喜歡解決方案。如果有人知道一個,會歡迎更優雅的方法。

我所做的是使用mMedia SDK而不是AdMob。他們的Interstitial和AdView類都可以在構造函數中使用Context而不是Activity。自從它在Dream疊加後面打開後,Interstitial仍然無法爲我工作。所以我最終做的是在我的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(); 

}