Meine Andorid-App funktioniert offline und online. Es zeigt Anzeigen an, wenn es sich im Online-Modus befindet. In einem Szenario, in dem es im Offline-Modus arbeitet und der Benutzer die Internetverbindung aktiviert, möchte ich wissen, ob die Anzeige bereits geladen ist. Wenn nicht, würde ich eine neue Anzeige laden. Ich habe mir AdMob API (AdView-Klasse) angesehen, konnte aber nichts finden, was dies tut.
Hier ist die Implementierung meiner AdListener
entsprechend der Antwort von @Hounshell. Aber keine der hier implementierten Methoden wird ausgeführt.
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
}
});
Und ein Teil der main.xml, die das AdView abdeckt
<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>
Von https://developers.google.com/mobile-ads-sdk/docs/Android/intermediate#adlistener
AdView.setAdListener(new AdListener() {
// Implement AdListener
});
Die onReceiveAd()
Ihres AdListeners wird aufgerufen, wenn eine Anzeige verfügbar ist. onFailedToReceiveAd()
wird aufgerufen, wenn keine Anzeige mit einem Code verfügbar ist, der den Grund dafür erklärt (einschließlich Netzwerk nicht verfügbar und keine Füllung).
Gleiche grundlegende Antwort, neue URL: https://developers.google.com/admob/Android/banner?hl=de
Einfach...!!!
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);
Ich habe dieses Problem mit einer Problemumgehung gelöst. Zum ersten Mal habe ich überprüft, ob AdView
ein leeres Tag hat oder nicht.
if (adView.getTag() != null && adView.getTag() instanceof Boolean && (Boolean) adView.getTag()) {
//Adview is already loaded
}
Wenn adView ein Boolean
-Tag-Objekt hat und dies wahr ist, ist die Anzeige bereits geladen.
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
}
});