Java 在应用程序的某些部分禁用AdMob广告
我的应用程序(OpenGL ES 2.0)目前有55个类和一个活动 我有自己的自定义场景管理器,用于在不同场景之间进行更改(即,不同场景将是:主菜单、关卡选择、关卡1、关卡2……关卡20、游戏结束等) 因此,我在活动的onCreate()中设置了所有AdMob内容;方法。因此,目前,整个应用程序中都有相同的广告 如何“关闭”不同场景上的广告 请记住,我的任何类都不能直接访问Activity类本身 如果您有任何建议,我将不胜感激,因为我发现使用AdMob非常具有挑战性,它似乎不是很直观,因此任何AdMob专家都会非常感谢您的意见 我应该指出,我不使用XML,一切都是通过编程完成的 谢谢 代码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
@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())