2

现在我正在使用Gluon 插件,开始使用JavaFXPorts非常有帮助。我已经准备好我的应用程序,我可以在电脑和手机上使用它。我在带有系统android的手机上进行了测试。应用程序运行良好,但仅适用于我的服务器。

我会处理不同的分辨率,我认为现在这很好。

我想拥有回合制多人应用程序,但使用 Google Play Service仍然存在很大问题。展示如何将此服务用于回合制多人应用程序的教程是用纯 android 编写的并使用 Activity。我的问题可能很简单,但如果我有来自“fxml”的应用程序视图,如何将它用作教程活动?

我想为我的应用程序进行自动匹配,接下来我想要覆盖方法 takeTurn() 以使其适合我的应用程序。

例如,我怎样才能将这样的东西(下面的代码)更改为 JavaFX 中的应用程序?

除了 AndroidPlatformProvider.java 之外,我还必须使用 JavaFX(src/main/java 文件夹) 类中的 google 服务,并且所有方法都必须位于src/android/java文件夹中。我知道我必须使用PlatformServicePlatformProvider。我按照以下示例进行操作:HelloPlatformSMSTracker

我使用接口 PlatformProvider 中的方法,但应用程序仍然崩溃。:(

我只使用我的 JavaFX 代码中的 Provider 并且我没有 android Activity。我不知道如何在没有 Activity 或 View 的情况下使用这些方法:

- public void onActivityResult(int request, int response, Intent data)

- public void playTurn(查看视图)

我可以从谷歌服务方法调用我的控制器中的方法来查看(fxml)吗?我不知道这些方法应该如何与 JavaFX 一起使用。

public class TbmpGameActivity extends Activity {
...

@Override
public void onActivityResult(int request, int response, Intent data) {
    super.onActivityResult(request, response, data);
    ...

    if (request == RC_SELECT_PLAYERS) {
        if (response != Activity.RESULT_OK) {
            // user canceled
            return;
        }

        // Get the invitee list.
        final ArrayList<String> invitees =
                data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS);

        // Get auto-match criteria.
        Bundle autoMatchCriteria = null;
        int minAutoMatchPlayers = data.getIntExtra(
                Multiplayer.EXTRA_MIN_AUTOMATCH_PLAYERS, 0);
        int maxAutoMatchPlayers = data.getIntExtra(
                Multiplayer.EXTRA_MAX_AUTOMATCH_PLAYERS, 0);
        if (minAutoMatchPlayers > 0) {
            autoMatchCriteria = RoomConfig.createAutoMatchCriteria(
                    minAutoMatchPlayers, maxAutoMatchPlayers, 0);
        } else {
            autoMatchCriteria = null;
        }

        TurnBasedMatchConfig tbmc = TurnBasedMatchConfig.builder()
                .addInvitedPlayers(invitees)
                .setAutoMatchCriteria(autoMatchCriteria)
                .build();

        // Create and start the match.
        Games.TurnBasedMultiplayer
            .createMatch(mGoogleApiClient, tbmc)
            .setResultCallback(new MatchInitiatedCallback());
    }
}
}

或类似的东西:

// Call this method when a player has completed his turn and wants to
// go onto the next player, which may be himself.
public void playTurn(View view) {

    // Get the next participant in the game-defined way, possibly round-robin.
    String nextParticipantId = getNextParticipantId();

    // Get the updated state. In this example, we simply retrieve a
    // text string from the view. In your game, there may be more
    // complicated state.
    mTurnData = mDataView.getText().toString();

    // At this point, you might want to show a waiting dialog so that
    // the current player does not try to submit turn actions twice.
    showSpinner();

    // Invoke the next turn. We are converting our data to a byte array.
    Games.TurnBasedMultiplayer
    .takeTurn(mGoogleApiClient, mMatch.getMatchId(),
             mTurnData.getBytes(Charset.forName("UTF-16")),
             nextParticipantId)
    .setResultCallback(this);
}
4

1 回答 1

0

最新版本的 jfxmobile 插件 ( 1.0.3 ) 包括 Dalvik SDK 的最新更改,其中包含 JavaFX 8 到 android 的端口。

FXActivity课堂上,增加了一个非常方便的方法来监听意图的结果:setOnActivityResultHandler().

这意味着您不应将新活动添加到您的应用程序,而只能使用FXActivity. 您应该向它添加一个 Intent,并为FXActivity.

看看最近在 Gluon 网站上发布的帖子。它解释了如何访问原生服务,基于使用设备的相机拍照并等待获得结果以恢复应用程序的情况。

基本上,这是在这种情况下所需要的:

public void takePicture() {
    // create intent
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    ...

    // Add result handler 
    FXActivity.getInstance().setOnActivityResultHandler((requestCode, resultCode, data) -> {
        if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {
            ...
        }
    });

    // launch activity
    FXActivity.getInstance().startActivityForResult(intent, TAKE_PICTURE);
}

在您的应用中尝试这种方法。

于 2015-10-11T11:36:33.227 回答