广告不可见。没有刷新广告。屏幕关闭后

时间:2014-03-23 16:31:33

标签: android admob

我注意到屏幕关闭后我收到以下消息:

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

5 个答案:

答案 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;