Запретить перезапуск ландшафтного приложения Android на блокировку

Я разрабатываю игру (вроде), которая использует OpenGL и имеет фоновую музыку. Приложение работает только в ландшафтном режиме.

Проблема у меня возникает, когда пользователь блокирует экран. В этот момент onStop() , меняется ориентация экрана и вскоре после возобновления моей активности в результате изменения ориентации. Это означает, что поверхность OpenGL воссоздана, музыка снова начинает играть и всевозможные другие вещи. Это противоречит интуиции, так как блокировка экрана должна приостанавливать операции интенсивного процессора, а не запускать их.

Добавление android:configChanges="orientation" в манифест ничего не делал. Я действительно понимаю, что я, вероятно, отсутствует screenSize в android:configChanges но я не могу добавить его, так как я нацелен на более ранние версии API, которые не имеют этой опции.

Итак, вопрос в том, каков правильный способ справиться с этим? На каком событии я должен инициализировать мое приложение, чтобы все работало так, как ожидалось?

Добавление screenSize в configChanges в манифесте не означает, что ваша программа не будет работать в старой версии. Вам просто нужно установить targetSdkVersion для более высокой версии и minSdkVersion в любое удобное для вас время. В intelljIDEA я устанавливал ModuleSKD в 4 в структуре проекта, поэтому он не выделяет screenSize как недопустимый. Он должен быть похож на Eclipse.

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <activity android:name=".MyActivity" android:label="@string/app_name" android:configChanges="orientation|screenSize|keyboard|keyboardHidden|navigation"> 

Также вы можете проверить версию в коде следующим образом:

 if (Build.VERSION.SDK_INT >= 11) 

Таким образом ваше приложение работает как с 2.2, так и с более высокими версиями.

Я думаю, вам не понадобится onConfigurationChanged, потому что ваша игра, вероятно, будет работать только в ландшафтном режиме, но если ваш заинтересованный взглянет на мой вопрос, очень похожий на ваш и мой собственный ответ.

Заменить макет на изменение ориентации

Добавить тег

"android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout" для вашей деятельности в Manifest.xml,

И переопределить метод

 public void onConfigurationChanged(Configuration newConfig) {} 

Если ваша игра предназначена только для ландшафтного режима, попробуйте установить android:screenOrientation="landscape" в теге activity .

  @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); } 

Выше находятся два метода в активности для сохранения состояния при изменении ориентации активности. Он сохраняет данные в объекте bundle в виде пар значений ключа.

Не нужно добавлять теги в файл Androidmanifest.xml. Для вышеуказанного фрагмента кода.

android:screenOrientation="landscape" Этот тег можно использовать, чтобы ваша активность запускалась только в ландшафтном режиме. Этот тег должен быть добавлен в тег активности Androidmanifest.xml

В вашем конкретном случае я предпочитаю использовать это:

 @Override protected void onCreate(final Bundle savedInstance) { super.onCreate(savedInstance); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } 

Работает во всех случаях и заставляет вашу деятельность быть ТОЛЬКО ландшафтом.

Я думаю, вам нужно будет принять тот факт, что когда телефон блокируется, ваша активность приостановлена ​​и / или остановлена. Это означает, что вам нужно будет снова начать некоторые из этих вещей. Это то, что я понимаю, прочитав книгу разработки Android Game с OpenGL.

Что вы можете сделать, это нечто большее, чем предлагалось в 421. В этих onSaveInstanceState и onRestoreInstanceState вы можете сохранить часть песни, в которой находитесь, и любые другие данные, которые позволят игре начать «плавно», даже если ей, возможно, придется перезагрузить некоторые вещи.

Если вы еще не нашли другого ответа, возможно, поэтому. Я испытал много неприятностей с играми, делающими странные вещи, когда телефон блокируется. Вам просто нужно вручную обрабатывать его правильно и плавно.

Intereting Posts
Статический массив строки должен быть преобразован из базы данных Как изменить цвет текста при нажатии на конкретное текстовое изображение в линейном режиме Ссылка на Facebook недоступна для моего проекта Грейдлы и вложенные непереходные зависимости Преимущества перехода от Eclipse к IntelliJ IDEA для разработки Android Как проверить кодовое имя устройства Android? Отключение воспроизведения видео с помощью VideoView в приложении для Android Программно добавленные RadioButtons отказываются подчиняться LayoutParams weighting Recyclerview onscrolllistener не работает, если setNestedScrollingEnabled – false Как очистить историю журналов вызовов в Android? Каковы размеры значков навигационного ящика? Android Studio – локальный путь не существует BroadcastReceiver для новых приложений Пользовательский интерфейс активности обновления Android от службы API-интерфейс Google Docs возвращает 503-Сервис недоступный при загрузке файла. Что-то изменилось?