Могу ли я отобразить Google AdWords (AdView) в javafx на Android

java android javafxports gluon-mobile

413 просмотра

1 ответ

У меня есть приложение javafx, работающее на Android, и я хотел бы разместить Google AdWords на некоторых экранах. У меня проблема в том, что AdWords использует Google AdView для отображения надстройки, которая является объектом презентации Android и не совместима с уровнем представления JavaFX.

Пример кода, который создает AdView

import com.google.android.gms.ads.MobileAds;

import javafxports.android.FXActivity;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;

/**
 * Constructor creates AdView
 * Call getAdView() to retrieve AdView object.
 */
public class GoogleAds {

    private AdView adView = null;
    public GoogleAds() {
        AdView mAdView = createAddView();
        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)        // All emulators
                .build();
        mAdView.loadAd(adRequest);
    }
...

Теперь у меня есть объект com.google.android.gms.ads.AdView, готовый для презентации.

Я могу добавить его в иерархию просмотра Android с помощью

private void includeGoogleAdView(LinearLayout layout) {
    AdView adView = GoogleAds().getAdView();
    layout.addView(mAdView);
}

Все это работает, как и ожидалось, при запуске в качестве приложения для Android.

Таким образом, вопрос заключается в том, "могу ли я получить AdView для показа на уровне представления javafx?" ,

Был ли способ сделать com.google.android.gms.ads.AdView стать экземпляром javafx.scene.Node, тогда я мог бы добавить его, используя что-то вроде

private Node addToPane(AdView adView) {
    javafx.scene.layout.Pane pane = new javafx.scene.layout.Pane();
    pane.getChildren().addAll( canvas, adView);
    return pane;
}

Или есть другое решение?

Автор: Mike Murphy Источник Размещён: 08.11.2019 11:07

Ответы (1)


3 плюса

Решение

Вы можете легко включать AdViewв приложение, получая доступ к ViewGroupиз FXActivity.

Это фрагмент кода, который работает для меня. Обратите внимание, что он должен работать в UIThread:

public AndroidAds()  {

    FXActivity.getInstance().runOnUiThread(() -> {
        LinearLayout layout = new LinearLayout(FXActivity.getInstance());
        layout.setVerticalGravity(Gravity.BOTTOM);
        layout.setOrientation(LinearLayout.VERTICAL);

        AdView adView = new AdView(FXActivity.getInstance());
        adView.setAdSize(AdSize.SMART_BANNER);
        adView.setAdUnitId("ca-app-pub-XXXXXXXXXXXXXXXXXXXX");

        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .addTestDevice("XXXXXXXXXXXXXXXXXXXX")
                .build();
        adView.loadAd(adRequest);
        adView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                System.out.println("AD loaded");
            }
        });

        layout.addView(adView);

        FXActivity.getViewGroup().addView(layout);
    });

}

Автор: José Pereda Размещён: 21.08.2016 12:36
Вопросы из категории :
32x32