25

我的 Andorid 应用程序可以离线和在线工作。它在在线模式下显示广告。在离线模式下工作并且用户打开互联网连接的情况下,我想知道广告是否已经加载。如果没有,那么我会加载一个新广告。我查看了 AdMob API(AdView 类),但找不到这样做的东西。

AdListener根据@Hounshell 的回答,这是我的实现。但是这里实现的方法都没有被执行。

        adView.setAdListener(new AdListener() {

        @Override
        public void onReceiveAd(Ad arg0) {
            Toast.makeText(act, "Ad received",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onPresentScreen(Ad arg0) {
        }

        @Override
        public void onLeaveApplication(Ad arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
            Toast.makeText(act, "Failed to receive Ad",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onDismissScreen(Ad arg0) {
            // TODO Auto-generated method stub

        }
    });

以及覆盖 AdView 的 main.xml 的一部分

<FrameLayout 
                    android:layout_width="fill_parent"
                    android:layout_height="50dp"
                    >
                <com.google.ads.AdView
                    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
                    android:id="@+id/adView"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    ads:adSize="BANNER"
                    ads:adUnitId="xxxxxxxxxxxxxxxx"
                    ads:loadAdOnCreate="true" />
                </FrameLayout>
4

5 回答 5

33

来自https://developers.google.com/mobile-ads-sdk/docs/android/intermediate#adlistener

AdView.setAdListener(new AdListener() {
      // Implement AdListener
    });

onReceiveAd()当广告可用时将调用您的 AdListener ,当广告不可用时将调用您的 AdListener,onFailedToReceiveAd()并提供解释原因的代码(包括网络不可用和未填充)

更新:

相同的基本答案,新网址:https ://developers.google.com/admob/android/banner?hl=en

于 2012-03-21T07:18:01.210 回答
6

简单地...!!!

final AdView mAdView = (AdView) findViewById(R.id.adView);
        mAdView.setVisibility(View.GONE);
    mAdView.setAdListener(new AdListener() {
        private void showToast(String message) {
            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAdLoaded() {
            showToast("Ad loaded.");
            if (mAdView.getVisibility() == View.GONE) {
                mAdView.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            showToast(String.format("Ad failed to load with error code %d.", errorCode));
        }

        @Override
        public void onAdOpened() {
            showToast("Ad opened.");
        }

        @Override
        public void onAdClosed() {
            showToast("Ad closed.");
        }

        @Override
        public void onAdLeftApplication() {
            showToast("Ad left application.");
        }
    });


    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
于 2016-12-28T15:26:18.300 回答
6

我通过一些解决方法解决了这个问题。我第一次检查是否AdView有空标签。

if (adView.getTag() != null && adView.getTag() instanceof Boolean && (Boolean) adView.getTag()) {
        //Adview is already loaded
    }

如果 adView 有一个Boolean标签对象并且它是真的,那么广告已经加载,否则加载广告并设置标签 -

adView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                adView.setTag(true); // Set tag true if adView is loaded
            }

            @Override
            public void onAdFailedToLoad(int i) {
                super.onAdFailedToLoad(i);
                adView.setTag(false); // Set tag false if loading failed
            }
        });
于 2017-03-13T21:10:17.060 回答
0

您可以使用 getResponseInfo() 方法来检索有关已加载广告的信息。

if (adView.getResponseInfo() == null) {
   adView.loadAd(adRequest);
}

https://developers.google.com/admob/android/response-info

于 2021-06-10T09:22:14.607 回答
-1

您可以使用 isLoaded() 方法。我在与您相同的上下文中使用它,并在计时器内使用它来等待广告加载。

https://developer.android.com/reference/com/google/android/gms/ads/InterstitialAd.html

于 2014-09-21T18:31:02.327 回答