Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AdMob赢得';在刷新或登录google plus之前,不要显示横幅_Android_Admob_Libgdx_Google Play Services - Fatal编程技术网

Android AdMob赢得';在刷新或登录google plus之前,不要显示横幅

Android AdMob赢得';在刷新或登录google plus之前,不要显示横幅,android,admob,libgdx,google-play-services,Android,Admob,Libgdx,Google Play Services,我有个问题。我的AdMob已经设置了一段时间,没有任何问题,但我注意到一些错误。Ad成功加载(我看到来自ddms的消息),但它不会显示。它将在定期刷新60秒后显示,或者在我打开google plus登录时显示。这个问题只会发生在Google Play服务AdMob上,而不会发生在AdMobSDK jar上。我会改用AdMob jar,不过我正在使用Google Play Game服务获得排行榜和成就 我怀疑问题在于未显示视图或设置不正确 同样,在等待60秒后(以及广告刷新),或者当我打开谷歌pl

我有个问题。我的AdMob已经设置了一段时间,没有任何问题,但我注意到一些错误。Ad成功加载(我看到来自ddms的消息),但它不会显示。它将在定期刷新60秒后显示,或者在我打开google plus登录时显示。这个问题只会发生在Google Play服务AdMob上,而不会发生在AdMobSDK jar上。我会改用AdMob jar,不过我正在使用Google Play Game服务获得排行榜和成就

我怀疑问题在于未显示视图或设置不正确

同样,在等待60秒后(以及广告刷新),或者当我打开谷歌play服务的登录屏幕时,广告会自动显示出来

我正在添加我的代码,我还应该提到,我已经切换到了新的AdMob网站,我重复一遍,如果我使用AdMob jar文件,这个问题不会发生(广告会像正常情况一样在2-3秒内显示)。我已经删除了google play game services的代码(它们不会影响这个问题,因为我在没有它们的情况下尝试过我的其他应用程序,问题仍然存在)

主要活动代码:

public class MainActivity extends AndroidApplication {

public static enum AdsStatus {
    SHOW_ADS, HIDE_ADS;
}

protected RelativeLayout layout;

protected static AdView adMobView;

public static class InnerHandler extends Handler {
    WeakReference<MainActivity> mActivity;

    InnerHandler(MainActivityactivity) {
        mActivity = new WeakReference<MainActivity>(activity);
    }

    @Override
    public void handleMessage(final Message msg) {
        if(msg.obj instanceof AdsStatus) {
            switch((AdsStatus)msg.obj) {
                case SHOW_ADS:
                    mActivity.get().showAds();
                    break;
                case HIDE_ADS:
                    mActivity.get().hideAds();
                    break;
            }
        }
    }
}
protected Handler handler = new InnerHandler(this);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create the layout
    layout = new RelativeLayout(this);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

    // Create the libgdx View
    View gameView = initializeForView(new MainApplicationListener(), true);
    layout.addView(gameView);

    //Ad Mob
    final DisplayMetrics displayMetrics = MainActivity.this
            .getApplicationContext().getResources()
            .getDisplayMetrics();

    if (displayMetrics.widthPixels >= 800 && displayMetrics.heightPixels >= 480) {
        if(adMobView != null) {
            adMobView.destroy();
        }

        adMobView = new AdView(AirDance.this);
        adMobView.setAdUnitId(<MY_ID_IS_HERE>);
        adMobView.setAdSize(AdSize.SMART_BANNER);

        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);

        AdRequest adRequest = new AdRequest.Builder()
                            .addTestDevice(<MY_DEVICE_IS_HERE>)
                            .build();
        adMobView.loadAd(adRequest);

        layout.addView(adMobView, adParams);
    }

    // Hook it all up
    setContentView(layout);
}

@Override
protected void onResume() {
    super.onResume();

    AppRater.applicationLaunched(this, analytics);

    if(adMobView != null) {
        adMobView.resume();
    }
}

@Override
protected void onPause() {
    super.onPause();

    if(adMobView != null) {
        adMobView.pause();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();

    if(adMobView != null) {
        adMobView.destroy();
        adMobView = null;
    }
}

public void showAds() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if(adMobView != null) {
                adMobView.setEnabled(true);
                adMobView.setVisibility(View.VISIBLE);
            }
        }
    });
}

public void hideAds() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if(adMobView != null) {
                adMobView.setEnabled(false);
                adMobView.setVisibility(View.GONE);
            }
        }
    });
}
}

上述解决方案有效。保持横幅显示的更简单方法是设置其背景

adMobView.setBackgroundColor(Color.BLACK);

因为没有人回答我的解释,我会考虑这一个解决。我只是在加载事件上手动重新加载整个布局。无论如何,这只是一个功能性的解决方案,并没有解释为什么谷歌播放服务AdMob会出现这种情况

adMobView.setAdListener(new AdListener() {

    @Override
    public void onAdLoaded() {
        super.onAdLoaded();

        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                layout.requestLayout();
            }
        });
    }

});
adMobView.setAdListener(new AdListener() {

    @Override
    public void onAdLoaded() {
        super.onAdLoaded();

        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                layout.requestLayout();
            }
        });
    }

});

另外,正如用户3263204所提到的,您可以尝试以下方法

adMobView.setBackgroundColor(Color.BLACK);

要解决您的问题。

正如用户3263204所说,您可以使用setBackgroundColor使adview出现。 如果(在我的例子中)您对其他内容有意见,则可以使背景透明:


adMobView.setBackgroundColor(getResources().getColor(android.R.color.transparent))

您也可以请求WindowFeature(Window.FEATURE\u NO\u TITLE);并设置为全屏和广告显示

banner.setBackgroundColor(Color.TRANSPARENT);
这似乎为我解决了这个问题。还要确保从UI线程中运行横幅创建代码

activity.runOnUiThread(new Runnable()
{
    @Override
    public void run()
    {
        // all your banner creation code is here
        banner.setBackgroundColor(Color.TRANSPARENT);
    }
});

欢迎通常我们会尽量避免问题中的感谢标语,以保持它们的整洁,你可以在这里读到为什么:“。好的,谢谢!我不知道,这对我也有用。谢谢你,伙计!这对我很有用。:)
activity.runOnUiThread(new Runnable()
{
    @Override
    public void run()
    {
        // all your banner creation code is here
        banner.setBackgroundColor(Color.TRANSPARENT);
    }
});