授权禁用AdmobAds

问题描述 投票:0回答:9

在您的布局文件(例如,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>
android admob
9个回答
43
投票
然后在您的代码中(例如,在“ if”块中)

(LinearLayout) adscontainer = (LinearLayout) findViewById(R.id.adsContainer); View admobAds = (View) findViewById(R.id.admobAds); adscontainer.removeView(admobAds);
this将“永久”(对于应用程序的生命周期)从Layou中删除广告,这意味着不会要求任何广告。
    

我还想使用户能够禁用广告 - 为什么如果他们不想看到他们?为什么您应该期望人们为该选择付费?
,我概述了我在这篇文章

中如何做到这一点。这篇文章更详细地介绍,但这是相关部分:


27
投票

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()); } }); }

不幸的是,
setVisibility(View.GONE);
+

setEnabled(false)

组合在所有Android版本 /设备上都无法普遍使用。根据您何时调用它,最终可能会挂在空屏幕上(没有NPE,只需空白屏幕)。
到目前为止,对我有用的唯一解决方案是:

4
投票

protected void removeAdView(int adViewId) { View view = getWindow().getDecorView(); View adView = view.findViewById(adViewId); if (adView != null) { ViewGroup parent = (ViewGroup) adView.getParent(); parent.removeView(adView); parent.invalidate(); } }

碎片:
protected void removeAdView(View topView, int adViewId) {
    View adView = topView.findViewById(adViewId);

    if (adView != null) {
        ViewGroup parent = (ViewGroup) adView.getParent();
        parent.removeView(adView);
        parent.invalidate();
    }
}

该解决方案基于 @Quartertone的答案,但扩展到更为通用(即与所有

ViewGroup

不仅与所有

LinearLayout
一起使用)。只需将这些方法放入您的基本活动/碎片类中即可。
    

创建了一个从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);
    }
}

在您的XML中使用

3
投票
定义您的广告,而不是常规
    AdView
  1. ,并将

    loadAdOnCreate

    属性设置为
    false
    ,例如;
  2. <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数据合同中的某人可能很重要。

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

如果您读取logcat输出,它将打印
“ I/ADS:AD不可见。不刷新AD。

为您所拥有的一切,只是为了安全的一面:
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();
}


2
投票
可能会在布局中完全将其完全删除,但是我从来没有这样做。

我不确定删除建议后的布局是否会反弹;如果不是,则可以创建一个相同的(除了缺少AD)布局。 在您的发电量中,选择适当的布局。 然后,您只需要确保在用户进行选择后触发配置更改(可能已经根据您让他们选择的方式进行 - 例如,从偏好屏幕返回)。

制作一个称为Ads

的课程 像这样

1
投票

现在在课堂上导入它,您想从 使用

Ads.Remove(AdView, parent);
删除它。
`ads.Remove(“添加视图本身”,位于其位置的视图组或布局”);

0
投票

这里是2025年暂停或恢复广告视图的解决方案:


0
投票

adView.pause() adView.visibility = View.GONE

0
投票
ronesume ad:

adView.resume()
adView.visibility = View.VISIBLE

P。 vel_dan:爱你做什么💚。
    


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.