我使用GPS在我的应用程序中提供广告,但是在广告加载之前还有空白框,而且当用户无法访问互联网时,它看起来很糟糕。这是我认为从专用AdMob SDK(已弃用)迁移GPS SDK中的行为已发生变化。
我尝试了onAdLoaded的set侦听器,它在创建后设置的加载后将可见性设置为可见,但是存在严重的问题。这在应用程序启动时没有显示空白框,并且在加载后显示广告。但是,当无法访问互联网时,onAdLoaded不会因为隐藏的广告而随时解雇!还要返回这些日志:
广告不可见。没有刷新广告
从现在起安排广告刷新60000毫秒。
在这种情况下,用户永远不会看到广告...如何阻止GPS广告这样做呢? 我的代码放在主要活动中:
adView = new AdView(this);
adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
adView.setVisibility(View.VISIBLE);
super.onAdLoaded();
}
});
adView.setVisibility(View.GONE);
adView.setAdUnitId("xxx");
adView.setAdSize(AdSize.SMART_BANNER);
layout = super.root;
layout.addView(adView);
adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
答案 0 :(得分:0)
你可以设置一个侦听android.net.conn.CONNECTIVITY_CHANGE
的BroadcastReceiver如果再次建立网络连接,则可以展示广告。
或者你可以做我们其他人做的事情而不用担心偶尔出现空白AdView。
答案 1 :(得分:0)
我们能做的最简单的事情就是不做任何事......但结果很难看,空白框不性感。
如果我们将“可见”adView放入隐藏容器中,情况会发生变化,AdMob会认识到adView实际上不可见,因此广告不会显示。没有刷新广告。'因此容器是超级的。
解决方案相对较长,包括在onAdFailedToLoad触发后重新创建adView,直到加载第一个广告。我的解决方案源自Dan Dragut发布的here的好解决方案,我删除了容器,使代码略微缩短并使其兼容cordova。我使用非固定方向并使用smart_banner大小,因此需要处理onOrientationChange事件(并重新创建adView)。所以这就是:
public class example extends DroidGap
{
private Ad ad; // new ad class because of code size
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Set by <content src="index.html" /> in config.xml
super.loadUrl(Config.getStartUrl());
appView.getSettings().setRenderPriority(RenderPriority.HIGH);
ad = new Ad(this, super.root);
}
@Override
public void onConfigurationChanged(Configuration myConfig) {
super.onConfigurationChanged(myConfig);
ad.restart();
}
@Override
public void onPause() {
ad.pause();
super.onPause();
}
@Override
public void onResume() {
super.onResume();
ad.resume();
}
private class Ad {
private DroidGap mGap;
private AdView adView;
private LinearLayout layout;
private AdRequest adRequest;
private Handler handler = new Handler();
public Ad(DroidGap _mGap, LinearLayout _layout) {
mGap = _mGap;
layout = _layout;
adRequest = new AdRequest.Builder().build();
recreate();
}
public void restart() {
handler.removeCallbacksAndMessages(null);
layout.removeView(adView);
adView.destroy();
this.recreate();
}
public void pause() {
adView.pause();
}
public void resume() {
adView.resume();
}
private void recreate() {
adView = new AdView(mGap);
adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
adView.setVisibility(View.VISIBLE);
}
@Override
public void onAdFailedToLoad(int errorCode) {
//Log.e(TAG, String.format("onAdFailedToLoad(%s)", errorCode));
// Refresh it ourselves...
handler.removeCallbacksAndMessages(null);
handler.postDelayed(new Runnable() {
@Override
public void run() {
restart();
}
}, 30000); // delay of recreating ad
}
});
adView.setVisibility(View.GONE);
adView.setAdUnitId("xxx");
adView.setAdSize(AdSize.SMART_BANNER);
// Lookup your LinearLayout assuming it's been given
// the attribute android:id="@+id/mainLayout".
// Add the adView to it.
layout.addView(adView);
// Initiate a generic request.
// Load the adView with the ad request.
adView.loadAd(adRequest);
}
}
}