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>
https://developers.google.com/mobile-ads-sdk/docs/Android/intermediate#adlistener から
_AdView.setAdListener(new AdListener() {
// Implement AdListener
});
_
AdListenerのonReceiveAd()
は、広告が利用可能になると呼び出されます。onFailedToReceiveAd()
は、広告が利用できない場合に呼び出されます。
同じ基本的な答え、新しいURL: https://developers.google.com/admob/Android/banner?hl=en
単に...!!!
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にBoolean
タグオブジェクトがあり、それがtrueの場合、広告はすでにロードされています。そうでない場合は、広告をロードしてタグを設定します-
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
}
});