正确停用AdMob广告

时间:2010-12-28 20:47:16

标签: android admob

我正在将AdMob集成到我的应用中,我想知道如何正确停用广告。我想让用户能够禁用它们。由于错误的印象,我不想让AdMob遇到任何问题。这种方式是正确的还是我应该考虑一下?

AdView ads = (AdView) findViewById(R.id.ad);
ads.setEnabled(false);

8 个答案:

答案 0 :(得分:33)

在你的布局文件中(例如,main.xml):

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/adsContainer">

    <com.admob.android.ads.AdView 
        android:id="@+id/admobAds" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        app:backgroundColor="#000000" 
        app:primaryTextColor="#FFFFFF" 
        app:secondaryTextColor="#CCCCCC">

</LinearLayout>

然后在你的代码中(例如,在“if”块内)

(LinearLayout) adscontainer = (LinearLayout) findViewById(R.id.adsContainer);

View admobAds = (View) findViewById(R.id.admobAds);

adscontainer.removeView(admobAds);

这将“永久”(对于应用的生命周期)从layou中删除广告,这意味着不会有任何广告请求。

答案 1 :(得分:26)

我还想让用户能够停用广告 - 为什么要强迫别人看到他们不想要的广告?你为什么要指望人们为这个选择买单呢?

无论如何,我在this article概述了我是如何做到这一点的。这篇文章更详细,但这里是相关部分:

我用来关闭广告的代码:

private void hideAd() {
    final AdView adLayout = (AdView) findViewById(R.id.adView1);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            adLayout.setEnabled(false);
            adLayout.setVisibility(View.GONE);
        }
    });
}

然后重新开启(万一有人感到慷慨)

private void showAd() {
    final AdView adLayout = (AdView) findViewById(R.id.adView1);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            adLayout.setEnabled(true);
            adLayout.setVisibility(View.VISIBLE);
            adLayout.loadAd(new AdRequest());
        }
    });
}

答案 2 :(得分:3)

  1. 创建一个从AdView派生的新类;

    package com.MyApp;
    
    import android.app.Activity;
    import android.content.Context;
    import android.util.AttributeSet;
    
    import com.google.ads.AdRequest;
    import com.google.ads.AdSize;
    
    public class MyAdView extends com.google.ads.AdView {
    
    public MyAdView(Activity activity, AdSize adSize, String adUnitId) {
        super(activity, adSize, adUnitId);
        if (MyApp.m_ads_enabled) {
            AdRequest adRequest = new AdRequest();
               loadAd(adRequest);
        }
    }
    
    public MyAdView(Context context, AttributeSet attrs) 
    {
        super(context, attrs); 
        if (MyApp.m_ads_enabled) {
            AdRequest adRequest = new AdRequest();
               loadAd(adRequest);
        }
    }
    
    MyAdView(Context context, AttributeSet attrs, int defStyle) 
    {
        super(context, attrs, defStyle);
        if (MyApp.m_ads_enabled) {
            AdRequest adRequest = new AdRequest();
               loadAd(adRequest);
        }
    }
    
  2. 您的XML中的
  3. 使用MyAdView而非常规AdView定义您的广告,并将loadAdOnCreate属性设置为false,例如;

    < / LI>
    <com.MyApp.MyAdView android:id="@+id/adView"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             ads:adUnitId="0"
                             ads:adSize="BANNER"
                             ads:loadAdOnCreate="false"/>
    

    然后,根据MyApp.m_ads_enabled的价值,当您致电setContentView()时,广告将被停用或启用。

    这种方法的优势在于,在广告被停用的情况下,由于广告永远不会被请求,因此不会使用任何数据带宽,这对于有限或PAYG数据合同的某些人来说非常重要。

答案 3 :(得分:1)

setVisibility(VIEW.GONE);将从布局中删除广告。

可能会将其从布局中完全删除,但我从来没有这样做过。

答案 4 :(得分:1)

给予你所有的一切,只为了安全起见:

if (mAdView != null) {
    mAdView.setEnabled(false);
    mAdView.setVisibility(View.GONE);

    ViewGroup parent = (ViewGroup) mAdView.getParent();
    if (parent != null) parent.removeView(mAdView);

    mAdView.removeAllViews();
    mAdView.destroy();
}

答案 5 :(得分:1)

将视图的可见性设置为 GONE 就足够了。

如果您阅读Logcat输出,则会打印&#34;我/广告:广告不可见。没有刷新广告。&#34;

答案 6 :(得分:0)

我不确定删除广告视图后布局是否会重新流转;如果没有,您可以创建相同的(缺少广告除外)布局。在OnCreate中,选择正确的布局。然后,您只需要确保在用户进行选择后触发配置更改(可能已经发生,具体取决于您如何选择 - 例如从首选项屏幕返回)。

答案 7 :(得分:0)

创建一个名为Ads的类 像这样

`公共类广告{     public static boolean Show(AdView mAdView){

    if(mAdView != null){
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        return true;
    }
    return false;
    }
public static void Remove(AdView mAdView,ViewGroup parent){
    root.removeView(mAdView);
    }
public static void Remove(AdView mAdView,RelativeLayout mLayout){
    mLayout.removeView(mAdView);
    }
public static void Remove(AdView mAdView, LinearLayout mLayout){
    mLayout.removeView(mAdView);
    }
  }

现在将其导入要从中删除AdView的类中 使用Ads.Remove(AdView, parent); 删除它。 Ads.Remove("the add view itself", the ViewGroup or layout where it is");