Могу ли я запустить действие перед запуском libgdx?

Поскольку у меня есть исключение, запускающее mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); в libgdx render(), у меня есть идея сначала запустить настройки Bluetooth в активности Android, а затем закрыть активность и инициализировать 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;
    }
}

Нет сообщения о сбое, но приложение остается с черным экраном (даже без сообщения «привет»), если я добавлю следующее:

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

В logcat есть «E/AndroidRuntime (612): ОШИБКА: сбой присоединения потока». Но, как я уже сказал, нет сообщения о сбое.

Что-то здесь не так... Я не знаю, как правильно написать такой код. Спасибо.


person nms    schedule 13.07.2012    source источник


Ответы (2)


В любом случае это не сработает, но я бы сказал, что это, вероятно, сбой из-за того, что StartActivity не объявлен в манифесте.

person nEx.Software    schedule 13.07.2012
comment
IntelliJ IDEA добавила активность android:name=.StartActivity/› в манифест после создания класса активности. - person nms; 14.07.2012

Да, вы можете запустить активность перед запуском 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, как у вас выше.

И, конечно же, убедитесь, что ваш AndroidManifest.xml сначала запускает BluetoothActivity, а не libgdx.

<activity android:name=".BluetoothActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
person Steve Blackwell    schedule 18.07.2012
comment
Я задавался вопросом о чем-то подобном. Можно ли просто использовать части libgdx, такие как анимация, скажем, в заголовке или нижнем колонтитуле Activity? Если нет, можете ли вы перейти с экрана Libgdx к действию? назад и вперед? - person Code Droid; 25.07.2012
comment
@CodeDroid Я знаю, что вы можете использовать libgdx как один Activity среди нескольких, и я знаю, что вы можете переходить туда и обратно. Я сделал это, используя Android Activity для главного меню, а затем libgdx для игры. Если пользователь нажал кнопку «Назад», система Android выгружает текущий Activity (libgdx) и перезагружает следующий в стеке (главное меню). Я бы не подумал, что вы можете просто сделать верхний или нижний колонтитул, поскольку libgdx работает на основе OpenGL ES, хотя я точно этого не знаю. - person Steve Blackwell; 25.07.2012
comment
@SteveBlackwell Я использовал ту же самую технику, которую вы упомянули выше, но когда я возвращаюсь к активности libgdx, я получаю пустой экран !! Любые идеи? Проверьте вопрос здесь stackoverflow.com/questions/26009621/ - person Geo Paul; 24.09.2014