我注意到屏幕关闭后我收到以下消息:
I/Ads﹕ Ad is not visible. Not refreshing ad.
I/Ads﹕ Scheduling ad refresh 60000 milliseconds from now.
我在onResume
中有以下代码:
if (adView != null) {
adView.resume();
}
我对代码进行了调整,它确实被调用了。如果我退出活动并重新进入,它也可以正常工作,唯一的问题似乎是在屏幕关闭后返回时。
有这个问题的其他人吗?
感谢。
编辑:我用来创建广告和请求的代码
adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(id);
LinearLayout layout = (LinearLayout) findViewById(R.id.main_layout);
layout.addView(adView);
createAdRequest();
createAdRequest()
的代码:
AdRequest.Builder builder = new AdRequest.Builder();
builder.addKeyword(somekeyword);
AdRequest adRequest = builder.build();
adView.loadAd(adRequest);
我注意到其他奇怪的事情,如果我发现关键字已经改变,我有时会再次拨打createAdRequest
,在我拨打电话后,广告似乎也会停止刷新,但这次我看不到任何可见性消息,我再也没有看到请求,直到我再次呼叫createAdRequest
。
答案 0 :(得分:12)
您是否也在onPause和onDestroy中添加了代码?
@Override
protected void onPause() {
adView.pause();
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
adView.resume();
}
答案 1 :(得分:2)
确定。如果不坚持,我什么都不是。我测试了这个,作为一个警告,我一直在使用这些标志。我没有删除标志,但现在使用这个广播接收器它工作正常,似乎更加孤立的问题。我会解释一下。
getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON | // In onCreate
LayoutParams.FLAG_DISMISS_KEYGUARD |
LayoutParams.FLAG_SHOW_WHEN_LOCKED |
LayoutParams.FLAG_TURN_SCREEN_ON);
首先,我已将接收器用于其他目的。正如你可以看到我的标志重新打开我的屏幕,但我也有一个机制,如果需要将为我启动活动(由于这个错误,现在需要调整)。因此,这与我所有其他提到的机制一样工作的事实似乎意味着AdView检查屏幕状态一次然后在它重新开启后不检查的计时问题。这是我最初的怀疑,但正如你可以看到onRecieve方法返回void所以我不能承担责任。我不确定是否可以完全归咎于AdView的作者,因为我之前已经从这个意图中看到了一些奇怪的行为。它甚至可能是活动处理意图的能力的问题。
无论如何对不起,如果我在漫无边际地拿走,那就是我在屏幕关闭时实现了接收器来完成活动。我个人并不担心重新启动它,但如果你需要,我也会为代码添加注释。
[编辑]我会更清楚地了解Activity上下文的最可能情况。我正在使用服务,这就是为什么我看起来不同。我没有测试过这个,但它应该工作相同,但我不知道你怎么检查活动是否可以完成。甚至不确定这是否重要。如果你需要它们作为参考,我测试的工作代码将在我的编辑中。
[编辑]我最终在Activity上下文中使用了它,它按预期工作。如果KeyGuard不安全。阅读完整故事的评论。
class MyActivity extends Activity {
ScreenReceiver receiver;
@Override
protected void onCreate(Bundle savedInstance){
receiver = new ScreenReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy(){
unregisterReceiver(receiver);
}
private class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(getClass().getSimpleName(), "Got " + intent.getAction());
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
MyActivity.this.finish();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// context.startActivity(new Intent(context, MyActivity.class));
}
}
}
}
答案 2 :(得分:2)
我有这个问题。在我的例子中,横幅(adSize)的大小大于可用的屏幕区域。确保没有相互冲突的布局。
答案 3 :(得分:1)
除非广告对用户可见,否则Admob不会刷新。很明显,当您的手机关闭时,没有人可以看到广告,因此Admob没有理由请求其他广告。
我个人经常遇到同样的问题。一旦我将AdView放在一个ListView下面。在列表滚动到底部之前,AdView不可见,因此Admob不断记录“广告不可见。不刷新广告。”
另一次,我没有互联网连接,并且不断记录相同的消息。
答案 4 :(得分:0)
我将尝试这种方法,我认为它会得到回报。我整天都在排除故障。我希望我现在能够很好地掌握它。我粘贴了帖子的相关部分。当然onResume应该被推测。例如,我将简单地从onCreate方法移动广告创建。如果您使用xml来明确定义广告,则需要更改为严格的代码。
https://groups.google.com/forum/#!topic/google-admob-ads-sdk/jz-ZQh86lm0
我可以让日志保持沉默的唯一方法是删除onPause中的整个广告,然后在onResume中再次添加它。
如果我添加以下行,一切正常,但由于这不是推荐的方法,所以如果在调用onPause时停止计时器会很好。
admobAdView.pause();
((LinearLayout)admobAdView.getParent()).removeView(admobAdView);
admobAdView.destroy();
admobAdView = null;