Реклама в 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();
}