我可以在 android 上在 javafx 中显示 google adwords (AdView)

Can I display google adwords (AdView) in javafx on android

我在 android 上有一个 javafx 应用 运行ning,我想在某些屏幕上放置 google 广告词。我遇到的问题是 adwords 使用 googles AdView 来显示 add,它是一个 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 应用程序时,所有这些都按预期工作。

所以问题是"can I get an AdView to show in the javafx presentation layer?".

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

或者有其他解决方案吗?

通过从 FXActivity.

访问 ViewGroup,您可以轻松地在您的应用中包含 AdView

这是适合我的代码片段。注意它必须在 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);
    });

}