我可以在Android上的javafx中显示谷歌adwords(AdView)吗?

时间:2016-08-20 09:33:57

标签: java android javafxports gluon-mobile

我有一个在Android上运行的javafx应用程序,并希望在某些屏幕上放置谷歌adwords。我遇到的问题是adwords使用谷歌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应用程序运行时,所有这些都按预期工作。

所以问题是“我可以在javafx表示层中显示AdView吗?”

是否有办法让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;
}

还是有另一种解决方案吗?

1 个答案:

答案 0 :(得分: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);
    });

}