У меня есть игра на LibGDX. В соответствии с этим http://www.norakomi.com/tutorial_admob_part2_banner_ads1.php инструкция Я создал необходимые методы в файле AndroidLauncher.java. И в основном файле, созданном AndroidLauncher.java, я создал контроллер, а также интерфейс java-файла (http://www.norakomi.com/tutorial_admob_part2_banner_ads2.php). Проблема в том, что в моей игре есть несколько классов, которые расширяют друг друга, и соответствующее условие, которое я хочу использовать для отображения adMob, не является тем, к которому метод «initialize» дает «это» из файла AndroidLauncher.java. Но загрузить и дать запрос на adMob можно только с AndroidLauncher.java, потому что другие классы находятся в собственном игровом представлении.Как добавить рекламный баннер AdMob в игру LibGDX с несколькими видами деятельности и классами?
Как это решить?
Это основной код из AndroidLauncher.java
public class AndroidLauncher extends AndroidApplication implements AdsController {
private static final String BANNER_AD_UNIT_ID = "ca-app-pub-3940256099942544/6300978111";
private static final String INTERSTITIAL_AD_UNIT_ID = "ca-app-pub-3940256099942544/1033173712";
AdView bannerAd;
InterstitialAd interstitialAd;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
// Create a gameView and a bannerAd AdView
View gameView = initializeForView(new Stork2016(this), config);
setupBanner();
setupInterstitial();
// Define the layout
RelativeLayout layout = new RelativeLayout(this);
layout.addView(gameView, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
layout.addView(bannerAd, params);
setContentView(layout);
config.useCompass = false;
config.useAccelerometer = false;
public void setupBanner() {
bannerAd = new AdView(this);
//bannerAd.setVisibility(View.VISIBLE);
//bannerAd.setBackgroundColor(0xff000000); // black
bannerAd.setAdUnitId(BANNER_AD_UNIT_ID);
bannerAd.setAdSize(AdSize.SMART_BANNER);
}
public void setupInterstitial() {
interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId(INTERSTITIAL_AD_UNIT_ID);
AdRequest.Builder builder = new AdRequest.Builder();
AdRequest ad = builder.build();
interstitialAd.loadAd(ad);
@Override
public void showInterstitialAd(final Runnable then) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (then != null) {
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
Gdx.app.postRunnable(then);
AdRequest.Builder builder = new AdRequest.Builder();
AdRequest ad = builder.build();
interstitialAd.loadAd(ad);
}
});
}
interstitialAd.show();
}
});
}
@Override
public boolean isWifiConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return (ni != null && ni.isConnected());
}
@Override
public void showBannerAd() {
runOnUiThread(new Runnable() {
@Override
public void run() {
bannerAd.setVisibility(View.VISIBLE);
AdRequest.Builder builder = new AdRequest.Builder();
AdRequest ad = builder.build();
bannerAd.loadAd(ad);
}
});
}
@Override
public void hideBannerAd() {
runOnUiThread(new Runnable() {
@Override
public void run() {
bannerAd.setVisibility(View.INVISIBLE);
}
});
}
}
И тогда у нас есть файл Stork2016.java, в котором мы создаем AdsController, чтобы иметь возможность использовать методы добавляет в AndroidLauncher.java.
private AdsController adsController;
public Stork2016(AdsController adsController){
this.adsController = adsController;
}
@Override
public void create() {
adsController.showBannerAd();
batch = new SpriteBatch();
gsm = new GameStateManager();
music = Gdx.audio.newMusic(Gdx.files.internal("music.mp3"));
music.setLooping(true);
music.setVolume(0.5f);
music.play();
Gdx.gl.glClearColor(1, 0, 0, 1);
gsm.push(new MenuState(gsm));
}
А также мы интерфейса Java файл AdsController.java
public interface AdsController {
public void showBannerAd();
public void hideBannerAd();
public void showInterstitialAd (Runnable then);
public boolean isWifiConnected();
}
Итак, как мы можем видеть в Stork2016 мы имеем "gsm.push (новый MenuState (GSM));" и в MenuState.java у меня есть «gsm.set (новый PlayState (gsm));». В PlayState.java есть часть кода:
@Override
public void update(float dt) {
handleInput();
updateGround();
....
if (tube.collides(bird.getBounds()))
gsm.set(new GameOver(gsm));
...
}
}
camera.update();
}
условие «если» Фром приведенный выше код я хочу использовать, чтобы показать интерстициальный AdMob. Но это невозможно, потому что contoller, который принимает методы из AndroidLauncher.java, может быть создан только в Stork2016.java. А также в AndroidLauncher.java есть Посмотреть игруView = initializeForView (новый Stork2016 (this), config); , который передает «это» в Stork2016, где находится контроллер.
Я не понимаю ваш вопрос, пожалуйста, предоставьте нам код – Marius
Добавил код. – Ihor2017