Android : AdMob onClickListener

5
我在我的安卓应用程序中展示了 AdMob 的横幅广告。我希望当用户点击横幅广告时它会消失。我尝试了代码 AdView.setOnClickListener 但是它没有起作用...

编辑:这是代码

private void visual_banner(){
//##### Pubblicità #####
        //Create the adView    
        adView = new AdView(this, AdSize.BANNER, "a14e5bed604ebf8");   
        // Lookup your LinearLayout assuming it’s been given    
        // the attribute android:id="@+id/mainLayout"    
        LinearLayout layout = (LinearLayout)findViewById(R.id.layout_ads_streaming);    
        // Add the adView to it    
        layout.addView(adView); 
        // Initiate a generic request to load it with an ad    
        adView.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                adView.destroy();
                img.setVisibility(View.VISIBLE);
            }
        });
        adView.loadAd(new AdRequest());
        //### FINE PUBBLICITA'
}

也许你想展示一下你尝试过的内容,这样我们就能看出是否存在问题。 - MByD
我已经编辑了我的问题并插入了代码。 - MimmoG
4个回答

12

尝试使用 AdMob 的 adListener 来监听事件。

public interface AdListener {
  public void onReceiveAd(Ad ad);
  public void onFailedToReceiveAd(Ad ad, AdRequest.ErrorCode error);
  public void onPresentScreen(Ad ad);
  public void onDismissScreen(Ad ad);
  public void onLeaveApplication(Ad ad);
}

请让你的类实现该监听器,然后将监听器添加到adView中:

adView.setAdListener(this);

实现onDismissScreen事件,该事件在处理广告点击后恢复应用程序控制时发生。此时,您可以移除AdView,并且您将获得广告的点击奖励。

@Override
public void onDismissScreen(Ad ad) {
  if (adView != null) {
    adView.destroy();
  }
}

4

我可以帮助您处理AdWhirl广告相关的问题。

我已经查看了一些资料,并且做了以下工作:

public class AdWhirlLayoutCustom extends AdWhirlLayout {

public AdWhirlLayoutCustom(Activity context, String keyAdWhirl) {
    super(context, keyAdWhirl);
}

public AdWhirlLayoutCustom(Context context, AttributeSet attrs) {
    super(context, attrs);
}

// We intercept clicks
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean result = super.onInterceptTouchEvent(event);
    switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:
                    // Click!
        break;
    }

    return result;
}

}


2
如果你拦截了点击事件并隐藏广告,那么你将无法获得广告点击的收益,这就有点违背了广告展示的初衷。 - Eric Leichtenschlag

1
我同意以上所有答案,但我只是在扩展答案。我已经按照以下方式完成了操作:
将广告加载到AdView中,如下所示。
AdView adView = (AdView)findViewById(R.id.adView);
adView.loadAd(new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .addTestDevice("your device id")
                    .build());

现在,设置一个广告监听器在那个adView上。定义一个全局布尔变量,比如isClicked,当用户点击广告并切换到那个页面时,onAdLeftApplication()方法将被调用,所以将该变量设置为true。当用户点击广告时,将重定向到该广告页面,当前应用程序将进入暂停状态。
adView.setAdListener(adListener);

com.google.android.gms.ads.AdListener adListener = new AdListener() {
        @Override
        public void onAdClosed() {
            super.onAdClosed();
        }

        @Override
        public void onAdFailedToLoad(int i) {
            super.onAdFailedToLoad(i);
        }

        @Override
        public void onAdLeftApplication() {
            super.onAdLeftApplication();
            isClicked = true;
        }

        @Override
        public void onAdOpened() {
            super.onAdOpened();
        }

        @Override
        public void onAdLoaded() {
            super.onAdLoaded();
        }

        @Override
        public void onAdClicked() {
            super.onAdClicked();
        }

        @Override
        public void onAdImpression() {
            super.onAdImpression();
        }
    };

现在每当用户返回到当前应用活动时,onResume() 方法将被调用,因此实现您的其他内容将在那里或如下所示。
@Override
    protected void onResume() {
        super.onResume();
        if (isClicked){
            isClicked = false;
            // do your other stuff whatever you want;
        }
    }

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接