我的Andorid应用程序离线和在线工作。它在在线模式下显示广告。 在它处于离线模式并且用户打开互联网连接的情况下,我想知道广告是否已加载。如果没有,那么我会加载一个新广告。我查看了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
}
});
覆盖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>
答案 0 :(得分:28)
来自https://developers.google.com/mobile-ads-sdk/docs/android/intermediate#adlistener
AdView.setAdListener(new AdListener() {
// Implement AdListener
});
广告可用时,系统会调用您的AdListener onReceiveAd()
,如果广告无法使用代码解释原因(包括网络不可用且无填充),则会调用onFailedToReceiveAd()
相同的基本答案,新网址:https://developers.google.com/admob/android/banner?hl=en
答案 1 :(得分:4)
...简单!!!
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);
答案 2 :(得分:3)
我通过一些解决方法解决了这个问题。我第一次检查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
}
});
答案 3 :(得分:0)
您可以使用 getResponseInfo() 方法检索有关已加载广告的信息。
if (adView.getResponseInfo() == null) {
adView.loadAd(adRequest);
}
答案 4 :(得分:-1)
你可以使用isLoaded()方法。我在与您相同的上下文中使用它,并在计时器内等待广告加载。
https://developer.android.com/reference/com/google/android/gms/ads/InterstitialAd.html