Реклама в Android Daydream/DreamService?

Кто-нибудь знает, работает ли какой-либо из Android Advertising SDK с новой функциональностью DreamService? Я попытался использовать AdMob и впервые увидел, что конструктор класса Interstitial явно требует Activity. Я видел, что в AdView есть конструктор, которому просто нужен контекст, поэтому я попробовал это, но получил исключение времени выполнения, сообщающее мне, что проблема заключается в том, что я пытаюсь накачать AdView, используя контекст, отличный от Activity. Я пытался попробовать API Amazon Mobile Ads, но оно похоже на AdMob.

Я пытался проявить творческий подход и запустить другое действие из моей DreamService, которая создает промежуточную рекламу, но она была создана за пользовательским интерфейсом DreamService (это имеет смысл, поскольку Daydream перекрывает все). Кто-нибудь знает какое-либо решение для использования рекламы в Daydream?

1 ответ

Я придумал что-то, что решает эту проблему, хотя мне все еще не очень нравится решение. Хотелось бы приветствовать более элегантный подход, если кто-то знает об этом.

Я использовал mMedia SDK вместо AdMob. Их классы Interstitial и AdView могут использовать Context, а не Activity в конструкторе. Interstitial до сих пор не работает для меня, так как он открывается за оверлеем Dream. В итоге я добавил AdView в XML-макет моей Dream, а затем установил его видимость на View.GONE, пока не захотел его отобразить. Когда пришло время показывать объявление, я установил его на View.VISIBLE.

Другая проблема, с которой я столкнулся, заключалась в том, что после нажатия на AdView он запускает браузер с URL-адресом объявления, который, конечно же, открывается за Dream, что лишает цели показ рекламы. Итак, я настроил Dream на интерактивность, поймал onTouchEvent, а затем, если объявление становится видимым, когда происходит щелчок, вызовите метод callOnClick объявления. Я также должен был установить RequestListener объявления для моей службы Dream и реализовать метод 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();

}
Другие вопросы по тегам