Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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广告_Android_Api_Admob_Adview - Fatal编程技术网

Android 如何知道是否已加载AdMob广告

Android 如何知道是否已加载AdMob广告,android,api,admob,adview,Android,Api,Admob,Adview,我的android应用程序可以离线和在线工作。它在联机模式下显示广告。 在离线模式下工作,用户打开互联网连接的情况下,我想知道广告是否已经加载。如果没有,那么我将加载一个新的广告。我查看了AdMob API(AdView类),但找不到可以这样做的东西 根据@Hounshell的回答,下面是我的AdListener的实现。但是这里实现的方法都没有得到执行 adView.setAdListener(new AdListener() { @Override

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

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

        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

        }
    });
以及main.xml中包含AdView的一部分

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

来自

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

更新: 相同的基本答案,新的URL:

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

简单地

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

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

if (adView.getTag() != null && adView.getTag() instanceof Boolean && (Boolean) adView.getTag()) {
        //Adview is already loaded
    }
如果adView有一个
布尔值
标记对象,且该对象为真,则ad已加载,否则加载ad并设置标记-

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

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

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

以我个人的经验,当我打开互联网购买该设备时,会加载一则广告。是的。我确实希望它能像那样工作。我已经用main.xml的一部分更新了我的问题。我只是在活动的onCreate()中创建AdView的新实例。我想这应该足够了。你能发布一些你正在使用的代码吗?正如你提到的,我实现了一个
AdListener
。但是我看不到这些实现的方法中有任何一个正在被执行。虽然我可以在设备连接到internet和未连接到internet时看到广告,但广告不会显示。您可以发布实现它的代码以及设置它的位置吗?我实现了@Hounshell的回答中提到的
AdListener
。我将用此代码编辑问题。但是问题是,
AdListener
中实现的方法没有一个得到执行。为了涵盖所有的基础,您在onReceiveAd()方法中是否有断点或其他语句,用于检查是否调用了它?System.out.println()在Android中实际上什么都不做。好。。我已经为此寻找了很多,最后我放弃了。我在我的应用程序中找到了一个合适的事件,如果互联网连接刚刚建立,我现在会发出一个新的广告请求。感谢@Hounshell的帮助。isLoaded仅用于间隙广告,不用于AdView
if (adView.getResponseInfo() == null) {
   adView.loadAd(adRequest);
}