在应用的某些部分停用AdMob广告

时间:2014-04-16 01:25:20

标签: java android admob opengl-es-2.0 advertising

我的应用程序(OpenGL ES 2.0)目前有55个类,还有一个活动单。

我有自己的自定义场景管理器,用于在不同的场景之间切换(即,不同的场景将是:主菜单,等级选择,等级1,等级2 ......等级20,游戏结束等... )

所以我在我的Activity的onCreate()中设置了我的所有AdMob内容;方法。所以目前,同一个广告在整个应用中运行。

如何在不同的场景中“关闭”广告?

请记住,我的课程都没有直接访问Activity类本身。

任何建议都会受到赞赏,因为我发现使用AdMob非常具有挑战性,它看起来并不直观,因此任何AdMob专家都会对此表示赞赏!

我应该指出我不使用XML,一切都是以编程方式完成的。

由于

代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        // Create an ad.
        adView = new AdView(this);
        adView.setAdSize(AdSize.BANNER);
        adView.setAdUnitId(AD_UNIT_ID);

        // Add the AdView to the view hierarchy. The view will have no size
        // until the ad is loaded.
        RelativeLayout layout = new RelativeLayout(this);
        layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,    LayoutParams.MATCH_PARENT));

        // Create an ad request. Check logcat output for the hashed device ID to
        // get test ads on a physical device.
        AdRequest adRequest = new AdRequest.Builder()
          .addTestDevice(TestDeviceID)
          .build();

        // Start loading the ad in the background.
        adView.loadAd(adRequest);

        //Request full screen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //Create a displayMetrics object to get pixel width and height
        metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        width = metrics.widthPixels;
        height = metrics.heightPixels;

        //Work out values for resizing screen while keeping aspect ratio

        width = (int) Math.min(width, height * 1.702127659574468);
        height = (int) Math.min(height, width / 1.702127659574468);

        //Create and set GL view (OpenGL View)
        myView = new MyGLSurfaceView(MainActivity.this);

        RelativeLayout.LayoutParams adParams = 
                new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                RelativeLayout.LayoutParams.WRAP_CONTENT);
                adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

        //Set the colour if we don't, the ad won't show (bug?)
        adView.setBackgroundColor(Color.BLACK);
        layout.addView(myView);
        layout.addView(adView, adParams);

        //Create a copy of the Bundle
        if (savedInstanceState != null){
            newBundle = new Bundle(savedInstanceState);         
        }


        setContentView(layout);

}

2 个答案:

答案 0 :(得分:0)

首先,您通过编程方式进行布局会给自己带来很大的痛苦(我昨晚就此进行了讨论)。您应该考虑理解并使用XML布局。

但是要回答您的问题,您需要为想要控制广告是否显示的类找到一种方法,以便有一些向Activity发送消息的方法。我建议为它们注入一个由Activity中的内部类实现的接口。

界面需要看起来像:   - startShowingAds - 这应该开始请求广告并使AdView可见。   - stopShowingAds - 这应该暂停显示和隐藏AdView的广告。

答案 1 :(得分:0)

暂时隐藏您只需要隐藏AdView的广告,最终调用pause(),即使我认为隐藏的广告视图未刷新(您可以签入日志)。

关于如何从代码中访问AdView对象,具体取决于您可以从那里访问的内容。如果您正在绘制视图,那么解决方案可能是将AdView对象存储在View标记中(请参阅setTag()和getTag():https://developer.android.com/reference/android/view/View.html#getTag%28int%29)。