3

以下のコードを 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」を使用した正確なコード例はありません。ありがとう。

4

2 に答える 2

16

LibGDX はプラットフォームに依存しないライブラリであるため、LibGDX プラットフォームの netural API を使用するすべてのコードは、それ自体がプラットフォームに依存しない必要があります (つまり、Android や Windows 呼び出しなどはありません)。プラットフォーム固有の機能にアクセスするための標準的な方法は、インターフェイスを定義し、プラットフォームに依存しないコードからインターフェイスを使用することです。次に、アプリケーションの Android (またはデスクトップ) 固有のプロジェクトでインターフェイスの実装を作成し、libGDX コンポーネントを初期化するときにその実装を渡します。

このチュートリアルには詳細があります: http://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

同じアプローチの別の説明を次に示します (より適切に記述されていますが、例はあなたに明確に関連していません): https://github.com/libgdx/libgdx/wiki/Interfacing-with-platform-specific-code

チュートリアルは Android ネイティブ UI 要素へのアクセスに関心がありますが、基本的な考え方はあなたが望むものと同じです。

于 2012-10-02T23:08:10.233 に答える
3

startActivity()Activityクラスのメソッドであるため、エラーが発生します。

これを使用できるようにするには、クラスで次のことを行う必要があります。

  1. アクティビティの拡張またはアクティビティを拡張するクラス
  2. どこかにActivityインスタンスがあり、コンストラクターを介して渡される可能性があります

2番目のケースでは、次のようになります。

public class MyNonActivity {
    Context mContext;
    public MyNonActivity(Context context) {
        mContext = context;
    }

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

コンテキストまたはそのサブクラスの1つをサブクラス化するアクティビティまたはサービスまたはその他のものからクラスを呼び出すには:

MyNonActivity foo = new MyNonActivity(getBaseContext());

呼び出されたときまたは呼び出された後に、必ず上記を実行してくださいonCreate()

于 2012-10-02T16:13:32.520 に答える