在课程中添加Ads Admob,然后从另一个活动/课程中致电

时间:2019-01-04 01:14:36

标签: java android android-studio android-intent admob

我想在一个课程中添加一个 ads非页内广告横幅功能,并从其他课程中访问该功能。

我想在所有Activity类中调用它

我该如何实现?

package com.example....;
import ...


public class classAds{

private InterstitialAd mInterstitialAd;


public void mobileAds()
{
    MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");

    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("ca-app-pub-.............");

}    

我尝试了这段代码,但“ this”中的问题未被接受

我也尝试将其更改为

classAds.this
getContext()
getActivity()

3 个答案:

答案 0 :(得分:1)

我建议两种方法

1。像这样创建一个单独的Application类

public class ApplicationClass extends Application {

    private static ApplicationClass mInstance;

    public static Context getContext() {
        return mInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

}

然后像这样更改您的ClassAds

public class classAds{

private InterstitialAd mInterstitialAd;


public void mobileAds()
{
    MobileAds.initialize(ApplicationClass.getContext,
            "ca-app-pub-3940256099942544~3347511713");

    mInterstitialAd = new InterstitialAd(ApplicationClass.getContext);
    mInterstitialAd.setAdUnitId("ca-app-pub-.............");

} 
  1. 将ClassAds更改为

    public class classAds{
    
    private InterstitialAd mInterstitialAd;
    
    public void mobileAds(Activity activity)
    {
        MobileAds.initialize(activity,
                "ca-app-pub-3940256099942544~3347511713");
    
        mInterstitialAd = new InterstitialAd(activity);
        mInterstitialAd.setAdUnitId("ca-app-pub-.............");
    
       } 
    

然后在您的Activity类中将方法调用为

ClassAds classAds = new ClassAds;
classAds.mobileAds(this);

答案 1 :(得分:0)

这是缺少context' required while creating the InterstitialAd`对象的简单情况。

您可以做一件事,非常简单并且可以理解。 这是通用的代码。

public class ClassAds{

private InterstitialAd mInterstitialAd;
private Context mContext;

public ClassAds(Context context){
  //this is the constructor of this class
  mContext = context;
}
public InterstitialAd getMobileAds(){


    mInterstitialAd = new InterstitialAd(mContext);
    mInterstitialAd.setAdUnitId("ca-app-pub-.............");
    return mInterstitialAd;

   } 

还根据文档创建您自己的Application类的版本,并且每次应用启动时仅初始化一次SDK。阅读docs

要创建自己的应用程序,请阅读Here

使用您的SDK ID在Aplication类中创建最终的String变量

private static final String _ad_id = "YOUR_ADMOB_APP_ID";

然后在Application类的onCreate中像这样初始化SDK。

@Override
    public void onCreate() {
        super.onCreate();
            MobileAds.initialize(activity, _ad_id );
    }

然后从任何活动或类中像这样使用它。

ClassAds adsObject = new ClassAds(this)//here this is the context Activity
adsObject.getMobileAds();

尽管 AdUnitId 保持不变,但您可以使此类成为单例并在多个“活动”中使用。探索可能性!

如果您错过了,我想您当然没有,here是广告加载的官方指南。

答案 2 :(得分:0)

问题只是上下文! 您可以像这样在Class建设者中传递上下文。 检查以下代码!

public class Interstial_Ads {

    private InterstitialAd mInterstitialAd;
     Context context;


    public Interstial_Ads(final Context context) {
        this.context = context;

        MobileAds.initialize(context, new OnInitializationCompleteListener() {
               @Override
               public void onInitializationComplete(InitializationStatus initializationStatus) {
                   mInterstitialAd = new InterstitialAd(context);
                   mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
                   mInterstitialAd.loadAd(new AdRequest.Builder().build());
                   if (mInterstitialAd.isLoaded()){
                       mInterstitialAd.show();
                   }

               }
           });

    }

}
  

在活动调用中,该类传递主动性上下文。

Interstial_Ads         interstialAds = new Interstial_Ads(MainActivity.this);