Android intent LibGdx如何从LibGdx类返回到androidActivity

Android intent LibGdx如何从LibGdx类返回到androidActivity,android-intent,initialization,libgdx,Android Intent,Initialization,Libgdx,因此,在libgdx android项目中,我们有一个包含android活动的文件夹,另一个包含libgdx项目的源代码 要从Android活动启动“游戏”,我们使用initialize(new MyGdxGame(),cfg) 现在我需要知道如何从游戏中的libgdx类返回android活动,如主菜单 我试图从Activity扩展类以获得contextApplication,但我无法填充第二个参数,因为程序无法识别libgdx类中的android类…在libgdx项目中使用android特定代

因此,在libgdx android项目中,我们有一个包含android活动的文件夹,另一个包含libgdx项目的源代码

要从Android活动启动“游戏”,我们使用
initialize(new MyGdxGame(),cfg)

现在我需要知道如何从游戏中的libgdx类返回android活动,如主菜单


我试图从Activity扩展类以获得
contextApplication
,但我无法填充第二个参数,因为程序无法识别libgdx类中的android类…

在libgdx项目中使用android特定代码的标准方法是在libgdx核心项目中创建一个与平台无关的接口(例如,
interface PlatformStuff
),然后在每个特定于平台的后端(例如,桌面或Android)使用特定于平台的对象实现该接口(因此
class AndroidPlatformStuff实现PlatformStuff
)。您可以在构建界面时将特定于平台的界面实现传递到通用代码中(例如,
new MyGdxGame(new AndroidPlatformStuff())


调用更改活动和上下文的Android代码可能需要更多的工作(因为它会与libGDX基础设施进行一些交互),但也应该是可行的。您应该能够使用教程来集成对广告的支持,以获得基本想法。请参阅或

您应该创建回调;
创建一个接口并在android类上实现,然后在需要调用相关方法时将其传递给libgdx。

首先,您应该在核心文件夹中创建一个接口类。这通常与游戏类放在一起。例如,对于名为ActionResolver的接口类,您的函数名为LoginFacebook()

接口类

package com.mygdx.game;

public  interface ActionResolver {
    public void LoginFacebook();

}
现在在游戏类中,您应该具有以下构造函数:

public SpaceXplorerGame(ActionResolver actionResolver)
{
    this.actionResolver = actionResolver;
}
现在,在您的android文件夹中,在src->com.mygdx.game.android(您的包名)中,您应该创建您的处理程序类,在我的例子中,该类名为ActionResolverAndroid

public class ActionResolverAndroid implements ActionResolver {
    Handler handler;
    Context context;


    public ActionResolverAndroid(Context context) {
        handler = new Handler();
        this.context = context;
    }

public void LoginFacebook()
{
    handler.post(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(context, LoginActivity.class);
            context.startActivity(intent);
        }
    });

} 
}

现在,从LibGdx调用函数LoginFacebook()将带您进入android中的LoginAcitivty.class。
希望我没有错过任何东西。

用于广告平台的libGDX文档使用的正是您所需要的。它在libGDX核心中创建了一个接口,并在android启动器中实现了一个处理程序,可以从核心部分调用该处理程序

请参见此处

基本上跳过所有广告内容。向下滚动到“控制”,只需执行以下部分:

  • 在您的AndroidLauncher中注册一个新的处理程序。这是必要的,以便处理程序稍后可以在正确的android线程中处理接口的已实现功能…(请参阅“HelloWorldAndroid”)
  • 在核心项目中创建一个接口(如IActivityRequestHandler)
  • 让您的AndroidLauncher实现该功能,并使用处理程序在您的android线程中执行实际功能
最后,您需要向libGDX核心代码传递一个引用

class SingletonData{
  private SingletonData(){
  }
  private static SingletonData instance;
  public static SingletonData getInstance(){
    if(instance==null){
      instance = new SingletonData(); // can only be assessed here. no other class can generate a second instance
    }
    return instance;
  } 

  private IActivityRequestHandler handler;

  public void setHandler(IActivityRequestHandler handler){
    this.handler=handler;
  }

  public IActivityRequestHandler getHandler(){
    return this.handler;
  }
}
在您的AndroidLauncher(即HelloWorldAndroid)中,在其创建结束时调用以下命令以注册它:

SingletonData.getInstance().setHandler(this);
现在,您可以在您喜欢的任何核心类中使用它,方法是:

SingletonData.getInstance().getHandler().showAds(true); // showAds or whatever your interface handler implements
PS:确保在游戏开始后调用getHandler(),这样就不会得到空引用