有没有人知道Android Advertising SDK中是否有新的DreamService功能?我尝试使用AdMob,第一次看到Interstitial类构造函数显式地需要一个Activity。我看到AdView有一个只需要上下文的构造函数,所以我尝试了一下,但得到了一个运行时异常,告诉我问题是我试图使用上下文而不是Activity来膨胀AdView。我尝试过亚马逊移动广告应用程序接口,但它看起来和AdMob的一模一样。
我试着变得更有创意,从我的DreamService上开始了另一个活动,创建了一个间隙广告,但它是在DreamService UI后面创建的(有点道理,因为白日梦覆盖了一切)。有没有人知道在白日梦中使用广告的解决方案?
发布于 2013-07-21 21:55:22
我想出了一些方法来解决这个问题,尽管我仍然不太喜欢这个解决方案。会欢迎一种更优雅的方法,如果有人知道的话。
我所做的是使用mMedia开发工具包而不是AdMob。它们的Interstitial和AdView类都可以接受构造函数中的上下文而不是活动。间隙仍然没有为我工作,因为它打开后的梦想覆盖。所以我最后做的就是在我的Dream布局中添加一个AdView,然后将它的可见性设置为View.GONE,直到我想要显示它为止。当需要显示广告时,我将其设置为View.VISIBLE。
我遇到的另一个问题是,在点击AdView后,它会启动带有广告网址的浏览器,当然,它会在Dream后面打开,这违背了显示广告的目的。因此,我最终将Dream设置为交互式的,捕获了onTouchEvent,然后如果在单击时广告是可见的,则调用广告的callOnClick方法。我还必须将广告的RequestListener设置为我的梦想服务,并实现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();
}https://stackoverflow.com/questions/17736156
复制相似问题