【问题标题】:How can I implement AdMob Ads in a LibGDX Android project?如何在 LibGDX And​​roid 项目中实施 AdMob 广告?
【发布时间】:2017-06-11 14:53:23
【问题描述】:

我发现了这个 Flappy Bird GIT 项目:https://github.com/barodapride/flappy-tutorial-barodapride 如何在此实施 BannerAd? 没有布局文件。 以及如何实施 InterstitialAd? 如果我尝试写

public InterstitialAd mInterstitialAd;

然后它说“无法解析符号 InterstitialAd”

我知道如何在普通的 Android Studio 项目中执行此操作,但这是我第一次使用 libGDX,这太复杂了...

【问题讨论】:

标签: java android git libgdx admob


【解决方案1】:

我回答了here,您如何将 AdMob 横幅广告集成到您的 LibGDX 项目中。

现在我在横幅广告整合后回答InterstitialAd整合。

private static final String AD_UNIT_ID_INTERSTITIAL = "ca-app-pub-XXXXX/XXXXX";

private InterstitialAd interstitialAd;

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...
    ...

    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId(AD_UNIT_ID_INTERSTITIAL);
    interstitialAd.setAdListener(new AdListener() {
          @Override
          public void onAdLoaded() {}

          @Override
          public void onAdClosed() {
             loadIntersitialAd();
          }
    });

    loadIntersitialAd();
}


private void loadIntersitialAd(){

    AdRequest interstitialRequest = new AdRequest.Builder().build();
    interstitialAd.loadAd(interstitialRequest);
}

@Override 
public void showOrLoadInterstitial() {

     runOnUiThread(new Runnable() {
            public void run() {
                if (interstitialAd.isLoaded()) 
                     interstitialAd.show();                         
                else 
                     loadIntersitialAd();           
            }
      });
}

需要一个接口来从核心模块调用showOrLoadInterstitial,所以我在核心模块内部创建了IActivityRequestHandler,并将这个接口实现到android模块的AndroidLauncher

public interface IActivityRequestHandler {

     void showOrLoadInterstitial();
}

编辑

您不能使用类/接口名称调用非静态方法showOrLoadInterstitial(),需要IActivityRequestHandler 实现类的对象,因此创建MyGdxGame 的参数化构造函数并从android 模块传递引用。

 public class AndroidLauncher extends AndroidApplication implements IActivityRequestHandler  {

   @Override
   protected void onCreate (Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       View gameView=initializeForView(new MyGdxGame(this));
       ....
       ....
   }

MyGdxGame游戏类中捕获IActivityRequestHandler的引用

public class MyGdxGame extends Game {

   Public IActivityRequestHandler requestHandler;

   public MyGdxGame(IActivityRequestHandler requestHandler){
       this.requestHandler=requestHandler;
   }

   ...
}

现在你有了对象引用,可以调用requestHandler.showOrLoadInterstitial()

【讨论】:

  • 嘿,很好的答案 :) 如果你告诉我我必须写什么代码来显示它,我会接受它。例如在 onClickListener 中。我用这段代码试了一下:IActivityRequestHandler.showOrLoadInterstitial(); 但这说:不能从静态上下文引用非静态方法'showOrLoadInterstitial()'
  • showOrLoadInterstitial是非静态方法,不能用类名调用非静态方法,需要用IActivityRequestHandler实现类的对象调用
  • 嘿,我真的不明白。这是我在 GitHub 上的项目:github.com/Penta-Games/flappy-tutorial-barodapride-master 我想在“run()”方法中显示 GameplayScreen.java 中的添加。您将在 renderPlaying() 方法中找到 run() 方法。我怎样才能做到这一点?在您的帮助下,我成功地在一个新的 LibGDX 项目中展示了插页式广告,“Core”文件夹中只有一个 Java 文件。但是这个项目在“Core”文件夹中包含了10多个java文件。请告诉我如何在“run()”方法中显示插页式广告。对不起我的英语不好。
  • @FischGesicht 很抱歉我的回复晚了,我在您的项目中集成了插页式广告,并为此创建了一个 pull request,合并它。合并后,每次游戏结束时,您都可以获得插页式广告。我还更新了gradlegradle android pluginsdk versionbuild toolsgoogle play service 的版本...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多