Mon application Andorid fonctionne hors ligne et en ligne. Il affiche des annonces quand il est en mode en ligne. Dans un scénario où il fonctionne en mode hors connexion et où l'utilisateur active la connectivité Internet, je souhaite savoir si l'annonce est déjà chargée. Sinon, je chargerais une nouvelle annonce. J'ai regardé l'API AdMob (classe AdView), mais je n'ai rien trouvé qui fasse cela.
Voici l'implémentation de ma AdListener
selon la réponse de @Hounshell. Mais aucune des méthodes mises en œuvre ici ne sont exécutées.
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
}
});
Et une partie de main.xml qui couvre le 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>
De https://developers.google.com/mobile-ads-sdk/docs/Android/intermediate#adlistener
AdView.setAdListener(new AdListener() {
// Implement AdListener
});
Votre onReceiveAd()
AdListener sera appelé lorsqu'une annonce est disponible, onFailedToReceiveAd()
sera appelé lorsqu'une annonce n'est pas disponible avec un code expliquant pourquoi (y compris le réseau n'est pas disponible et aucun remplissage)
Même réponse de base, nouvelle URL: https://developers.google.com/admob/Android/banner?hl=fr
Simplement...!!!
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);
J'ai résolu ce problème avec un peu d'une solution de contournement. Pour la première fois, j'ai vérifié si AdView
avait une balise vide ou non.
if (adView.getTag() != null && adView.getTag() instanceof Boolean && (Boolean) adView.getTag()) {
//Adview is already loaded
}
Si adView a un objet de balise Boolean
et que cela est vrai, ad est déjà chargé, sinon chargez-le et définissez le 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
}
});