1

libgdxのrender()での実行 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); に例外があるため、最初にAndroidアクティビティでBluetooth設定を実行してから、アクティビティを閉じてlibgdxを初期化することを考えています。

次のコードがクラッシュします。

public class MyActivity extends AndroidApplication {
    public void onCreate (android.os.Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        Intent myIntent = new Intent(MyActivity.this, StartActivity.class);
        startActivity(myIntent);

        initialize(new MyGame(), false); //run libgdx
    }
}

StartActivityは次のとおりです(後でゲームタイトルとBluetooth設定になります):

public class StartActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView text = new TextView(this);
        text.setText("Hello World, Android");
        setContentView(text);

        try {
            Thread.sleep(7000);
        }
        catch (InterruptedException e) {};
        finish();
        return;
    }
}

クラッシュメッセージは表示されませんが、次のメッセージを追加すると、アプリは黒い画面のままになります(「hello」メッセージは表示されません)。

Intent i = new Intent(this, MyActivity.class);
startActivity(i);

logcatに「E/AndroidRuntime(612):ERROR:threadattachfailed」があります。しかし、私が言ったように、クラッシュメッセージはありません。

ここで何かがおかしい...そのようなコードを正しく書く方法がわかりません。ありがとう。

4

2 に答える 2

2

はい、libgdxを実行する前にアクティビティを開始できます。最初にlibgdxのものを開始しないでください。Bluetooth設定を開始し、準備ができたらを呼び出しIntentて実際のゲームを開始します。

このような:

public class BluetoothActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bluetoothsettings);
        Button startGame = (Button)findViewById(R.id.btnStartGame);

        // handle set start click
        startGame.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(BluetoothActivity.this, GameActivity.class);
                BluetoothActivity.this.startActivity(intent);
            }
        });
    }
}

そうすれば、ゲームアクティビティは、AndroidApplication上記のように拡張される通常のアクティビティになります。

そしてもちろん、libgdxではなく、最初にAndroidManifest.xml開始するようにしてください。BluetoothActivity

<activity android:name=".BluetoothActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
于 2012-07-18T19:50:10.020 に答える
0

それはとにかく機能しませんが、マニフェストでStartActivityが宣言されていないため、クラッシュする可能性が高いと思います。

于 2012-07-13T22:36:56.213 に答える