Java 在应用程序的某些部分禁用AdMob广告

Java 在应用程序的某些部分禁用AdMob广告,java,android,admob,opengl-es-2.0,ads,Java,Android,Admob,Opengl Es 2.0,Ads,我的应用程序(OpenGL ES 2.0)目前有55个类和一个活动 我有自己的自定义场景管理器,用于在不同场景之间进行更改(即,不同场景将是:主菜单、关卡选择、关卡1、关卡2……关卡20、游戏结束等) 因此,我在活动的onCreate()中设置了所有AdMob内容;方法。因此,目前,整个应用程序中都有相同的广告 如何“关闭”不同场景上的广告 请记住,我的任何类都不能直接访问Activity类本身 如果您有任何建议,我将不胜感激,因为我发现使用AdMob非常具有挑战性,它似乎不是很直观,因此任何A

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

我有自己的自定义场景管理器,用于在不同场景之间进行更改(即,不同场景将是:主菜单、关卡选择、关卡1、关卡2……关卡20、游戏结束等)

因此,我在活动的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);

}

首先,以编程方式进行布局会给自己带来很大的痛苦(我昨晚刚刚就此做了一个演讲)。您应该真正考虑理解和使用XML布局。

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

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

要临时隐藏广告,只需隐藏广告视图,最终调用pause(),即使我认为隐藏的广告视图没有刷新(您可以查看日志)

关于如何从代码中访问AdView对象,这取决于您可以从那里访问什么。如果您只有正在绘制的视图,解决方案可能是将AdView对象存储在视图的标记中(请参见此处的setTag()和getTag())