Reputation: 1863
My Andorid app works offline and online. It displays ads when it is in online mode. In a scenario where it is working in offline mode and user switches the internet connectivity on, I want to know if the ad is already loaded. If not, then I would load a new ad. I looked at AdMob API (AdView class) but could not find something that does this.
Here is the implementation of my AdListener
according to the answer from @Hounshell. But none of the methods implemented here are getting executed.
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
}
});
And part of main.xml that covers the 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>
Upvotes: 25
Views: 36716
Reputation: 1503
You can use the getResponseInfo() method to retrieving information about the loaded ad.
if (adView.getResponseInfo() == null) {
adView.loadAd(adRequest);
}
https://developers.google.com/admob/android/response-info
Upvotes: 2
Reputation: 12201
I solved this problem with a bit of a workaround. For the first time, I checked if AdView
has an empty tag or not.
if (adView.getTag() != null && adView.getTag() instanceof Boolean && (Boolean) adView.getTag()) {
//Adview is already loaded
}
If adView has a Boolean
tag object and it is true then ad is already loaded otherwise load the ad and set the tag -
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
}
});
Upvotes: 6
Reputation: 393
Simply...!!!
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);
Upvotes: 7
Reputation: 5459
From https://developers.google.com/mobile-ads-sdk/docs/android/intermediate#adlistener
AdView.setAdListener(new AdListener() {
// Implement AdListener
});
Your AdListener's onReceiveAd()
will be called when an ad is available, onFailedToReceiveAd()
will be called whan an ad isn't available with a code explaining why (including network not available and no fill)
Same basic answer, new URL: https://developers.google.com/admob/android/banner?hl=en
Upvotes: 34
Reputation: 3800
you can use isLoaded() method. I am using it on a same context as you and inside a timer to wait until ad is loaded.
https://developer.android.com/reference/com/google/android/gms/ads/InterstitialAd.html
Upvotes: -2