如何为所有我的活动制作横幅广告(admob)

时间:2012-03-09 05:12:54

标签: android admob android-activity

我有三个活动,所有这三个活动的底部都有横幅广告,这些广告由三个活动的OnCreate()方法中的代码设置。

由于某种原因,我需要在从一个活动转移到另一个活动时完成每个活动,并startActivity()回到第一个活动。

我想知道,如何为所有这三个活动制作一个横幅广告,而不是从不同的onCreate单独调用它们,因为我怀疑在活动过渡时我正在刷新广告(安静的)这对您的点击不是一个好习惯。

我是否应该在静态类中声明它,以便可以从任何活动中调用它,只有一个实例可以存在(因此不会因创建活动而刷新)

欢迎提出建议。

4 个答案:

答案 0 :(得分:2)

您知道如何实施ViewStub吗?

对于您的问题,ViewStub用于将AdMob广告置于页脚,您只需为此页脚创建布局,然后使用ViewStub示例将此布局包含在XML布局(活动布局)中

这是一个用于实现ViewStub的example,是标题栏的,但你可以从中获取概念。

现在,要优化解决方案(代码),您可以创建抽象类和扩展活动类,并在此类中包含您的AdMob广告代码。

例如:

public abstract class BaseActivity extends Activity
{
   /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

        public void setFooterAds()
        {
              // Make ViewStub visible
              // include your Ads code
        }
}

现在,您只需要在Activity类中扩展此BaseActivity类,并调用setFooterAds()方法来显示AdMob广告。

答案 1 :(得分:1)

您可以将这样的代码放在主要活动中,这样广告横幅就会显示在所有三项活动中。

import com.google.ads.*; 

public class testActivity extends Activity { 
private static final String MY_AD_UNIT_ID = "yourId"; 
private AdView adView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.loadUrl("file:///android_asset/www/index.html");          
    // Create the adView 
    adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID); 
    LinearLayout layout = super.root; // this is the only change 
    layout.addView(adView); 
    adView.loadAd(new AdRequest());

Xml文件:

<com.admob.android.ads.AdView
      android:id="@+id/ad"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      xmlns:backgroundColor="#000000"
      xmlns:primaryTextColor="#ffffff"
      xmlns:secondaryTextColor="#cccccc"

答案 2 :(得分:1)

我认为这里唯一的出路是使用单个活动和多个片段..活动将有一个框架布局和一个包含Ad ...的片段。根据用户体验,广告,将替换不同的屏幕(片段) -containing-fragment将保持原样,对所有屏幕都是通用的!

答案 3 :(得分:1)

有一种简单的方法!

冒烟了,发现“ ViewStub”之类的东西很有趣,这很有趣,感谢@Paresh数据提示,但为此目的目前太复杂了。使用横幅广告进行所有活动的方法比较简单,它使用的是SINGLETON,它存储所有应用程序的“ AdView”和“ AdRequest”信息。使用各自的ID初始化AdMob和Banners模块后,您可以在程序中的任何位置使用它,只需将AdView添加到每个活动的布局中,而不必忘记在完成每个活动后将其从布局中删除。

  1. 在您的项目中为您的特定模块(在本例中为Banners)添加单例类:

公共类SingletonAdMobBanner

private static SingletonAdMobBanner instance;
private AdView adView;
private AdRequest adRequest;

public synchronized static SingletonAdMobBanner getInstance() {
    if (instance == null) instance = new SingletonAdMobBanner();
    return instance;
}

AdView getAdView() {return adView;}
AdRequest getAdRequest() {return adRequest;}
void setAdView(AdView adView) {this.adView = adView;}
void setAdRequest(AdRequest adRequest) {this.adRequest = adRequest;}
  1. 将以下内容添加到MainActivity:

    // Initialize AdMob
    try {
        MobileAds.getVersionString();
    } catch (Exception ignored) {
        MobileAds.initialize(getApplicationContext(), new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
    }
    
    // Init Banner module
    SingletonAdMobBanner sam = SingletonAdMobBanner.getInstance();
    sam.setAdView(new AdView(getApplicationContext()));
    AdView adView = sam.getAdView();
    adView.setAdUnitId("your module id");
    adView.setAdSize(AdSize.SMART_BANNER);
    sam.setAdRequest(new AdRequest.Builder().build());
    
  2. 创建一个公共类或方法,以将横幅广告加载到您设计的特定布局中,以在每个活动中显示横幅广告。这是一个示例:

    public static void adLoadBanner (Activity activity) {
        SingletonAdMobBanner sam = SingletonAdMobBanner.getInstance ();
        if (sam.getAdView ()! = null && sam.getAdRequest ()! = null) {
            LinearLayout container = activity.findViewById (R.id.ad_view_container);
            container.addView (sam.getAdView ());
            sam.getAdView (). loadAd (sam.getAdRequest ());
        }
    }
    

在激活onDestroy中的活动之前,不要忘记从布局中删除横幅:

    // Remove Ad from this activity
    LinearLayout container = findViewById(R.id.ad_view_container);
    container.removeAllViews();
相关问题