【问题标题】:Admob + Andengine showing ad only on second requestAdmob + Andengine 仅在第二次请求时显示广告
【发布时间】:2014-02-19 18:40:24
【问题描述】:

问题是:广告没有在第一次请求时显示,但在发出第二次请求时,它显示正确。在它发出第二个请求前大约 2 秒,第一个请求的广告出现了。有任何想法吗? 谢谢,

编辑:我将重力改为 TOP,现在它第一次显示,但只显示广告的上半部分,奇怪,有什么想法吗?

@Override
protected void onSetContentView() {

    if(adView != null){
        return;
    }

    final FrameLayout frameLayout = new FrameLayout(this);
    final FrameLayout.LayoutParams frameLayoutLayoutParams =
            new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
                                         FrameLayout.LayoutParams.MATCH_PARENT);

    final FrameLayout.LayoutParams adViewLayoutParams =
            new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
                                         FrameLayout.LayoutParams.WRAP_CONTENT,
                                         Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);

    adView = new AdView(this);
    adView.setAdSize(AdSize.BANNER);
    adView.setAdUnitId(getResources().getString(R.string.ad_unit_id));
    adView.setAdListener(new ToastAdListener(this));
    adView.loadAd(new AdRequest.Builder().build());

    this.mRenderSurfaceView = new RenderSurfaceView(this);
    mRenderSurfaceView.setRenderer(mEngine,this);

    final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
            new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());

    frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
    frameLayout.addView(adView, adViewLayoutParams);

    this.setContentView(frameLayout, frameLayoutLayoutParams);
}

@Override
protected void onPause() {
    if(adView!=null){
        adView.pause();
    }
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    if(adView!=null){
        adView.resume();
    }
}

@Override
protected void onDestroy() {
    if(adView!=null){
        adView.destroy();
    }
    super.onDestroy();
}

【问题讨论】:

  • 另外,当我点击任何按钮或后退按钮时,在活动退出之前,广告会正确显示

标签: android admob andengine


【解决方案1】:

通过添加该行为我解决了问题 adView.setBackgroundColor(android.graphics.Color.TRANSPARENT);

【讨论】:

    【解决方案2】:

    我的做法如下:

    1. 在更改可见性的方法中,我首先检查广告是否已加载。如果不是,我不会更改可见性
    2. AdView 设置AdListener。在onReceivedAd() 中,我检查隐藏它的条件 - 如果它应该隐藏,我隐藏。

    这样可以正常工作。

    【讨论】:

    • 我希望它始终可见。我设置了 adListener,当活动运行时,我看到 onAdLoaded() 触发了一个 toast,所以它加载正确,但由于某种原因它没有第一次显示。我不会更改可见性,因为默认情况下它是可见的,对吧?
    • 调试我看到它总是可见的,总是在正确的位置,并且在 onAdLoaded() 上我强制刷新调用 adView.refreshDrawableState(),仍然不起作用,就在 1 分钟后当它再次调用请求时:(
    【解决方案3】:

    我遇到了同样的问题,我是这样解决的:

    广告类:

    public class Advertisement {
    
        private AdView adView;
        private final Handler adsHandler = new Handler();
    
        public Advertisement(final Activity activity) {
        adView = (AdView)activity.findViewById(R.id.adView);        
        }
    
        //show the ads.
        private void showAds () {
            adView.loadAd(new AdRequest.Builder().build());
            adView.setVisibility(android.view.View.VISIBLE);
            adView.setEnabled(true);
        }
    
        //hide ads.
        private void unshowAds () {
            adView.loadAd(new AdRequest.Builder().build());
            adView.setVisibility(android.view.View.INVISIBLE);
            adView.setEnabled(false);
        }
    
        final Runnable unshowAdsRunnable = new Runnable() {
            public void run() {
                unshowAds();
            }
        };
    
        final Runnable showAdsRunnable = new Runnable() {
            public void run() {
                showAds();
            }
        };
    
        public void showAdvertisement() {
            adsHandler.post(showAdsRunnable);
        }
    
        public void hideAdvertisement() {
            adsHandler.post(unshowAdsRunnable);
        }
    }
    

    在代码中:

    ...
    public static Advertisement advertisement = new Advertisement(this);
    ...
    public static void showAd() 
    {
        if (advertisement != null) 
            advertisement.showAdvertisement();
    }
    public static void hideAd() 
    {
        if (gangsterAdvertisement != null) 
            advertisement.hideAdvertisement();
    }
    

    【讨论】:

    • 我如何使用这个类?它在编译 java.lang.RuntimeException: Unable to instance activity ComponentInfo 期间一直向我显示此错误
    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多