Принудительная остановка автоповорота (Android, C ++, SDL2)

У меня есть игра, и она хорошо работает на Android через приложение под названием C4Droid (если вы не знаете о C4Droid, просто погуглите его). Он написан на C ++ и использует только SDL2.

Он работает в портретном режиме, и поэтому, когда я наклоняю устройство с включенным автоповоротом, он получает пейзаж.

Теперь я хотел сделать что-то, чтобы избежать получения пейзажа, даже когда автоповорот включен. Ответьте, пожалуйста?

0

Решение

Установить ориентацию в файле манифеста, как этот Android: screenOrientation

  <activity
android:name="com.androidgames.mreater.MrEaterGame"android:label="Mr. Eater"android:screenOrientation="portrait"android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2

Другие решения

Нет, это невозможно сделать только в SDL2 (это можно сделать в iOS, но по какой-то причине в Android они изменились). Ответ wadali лучший, вот несколько способов использовать его в вашей среде сборки:

  • Используйте другую среду сборки. Если вы создаете APK на настольном компьютере, вы можете контролировать содержимое файла AndroidManifest.xml. Если вы действительно хотите сделать это на своем телефоне, есть другие компиляторы C / C ++ для Android. То, что вы потеряете, — это простота использования C4Droid — вам нужно научиться создавать APK самостоятельно.
  • Создайте его с помощью C4Droid как обычно, а затем используйте редактор APK для извлечения, редактирования и перепаковки AndroidManifest.xml. Если вам удобно копировать APK на настольный компьютер, вы можете использовать apktool чтобы распаковать APK, отредактируйте нужный вам файл, а затем перепакуйте его снова (примечание: вам нужно будет переподписать APK после того, как вы его используете); в противном случае, похоже, есть несколько утилит редактора APK для Android.

Есть Android API для управления ориентацией, но вы не можете получить к ним доступ из SDL2. SDL2 создает свою собственную активность и не имеет возможности ни расширять ее, ни позволять вам предоставлять свою собственную активность, поэтому вы не можете предоставлять дополнительные вызовы Android API для своего собственного кода.

0