Libgdx中的Android Intent和startActivity(非Activity或AndroidApplication类)

时间:2012-10-02 16:03:13

标签: android android-intent libgdx

请帮我看看如何在Libgdx线程中运行以下代码 - 在render(),create()等中......

public class MyGame implements ApplicationListener, InputProcessor {
...
Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
.....
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(
"http://market.android.com/details?id=" + getPackageName()));
startActivity(marketIntent);

代码有编译错误。 我搜索了一些类似的线程,但没有“startActivity”的确切代码示例。 感谢。

2 个答案:

答案 0 :(得分:15)

LibGDX是一个独立于平台的库,因此使用LibGDX平台netural API的所有代码本身必须是独立于平台的(因此没有Android或Windows调用等)。要访问特定于平台的功能,标准方法是定义接口,并使用平台无关代码中的接口。然后在应用程序的Android(或桌面)特定项目中创建接口的实现,并在初始化libGDX组件时传递该实现。

本教程有更多详细信息:http://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

以下是对同一方法的另一种描述(编写得更好,但示例与您没有明显的关联):http://code.google.com/p/libgdx/wiki/ApplicationPlatformSpecific

本教程对访问Android原生UI元素感兴趣,但基本思路与您想要的一致。

另一个教程:https://carlorodriguez.github.io/blog/2014/10/05/android-platform-specific-code-with-libgdx/

答案 1 :(得分:2)

您收到错误是因为startActivity()Activity类中的一种方法。

为了能够使用它,您的班级必须

  1. 扩展活动或扩展活动的类
  2. 在某处有一个Activity实例,可能通过构造函数
  3. 传入

    在第二种情况下,你会有类似的东西:

    public class MyNonActivity {
        Context mContext;
        public MyNonActivity(Context context) {
            mContext = context;
        }
    
        public void myMethod() {
            Intent intent = new Intent(mContext, Next.class);
            mContext.startActivity(intent);
        }
    }
    

    并从ActivityService或其他子类Context或其子类之一调用您的类:

    MyNonActivity foo = new MyNonActivity(getBaseContext());
    

    确保在调用onCreate()之后或之后执行上述操作。