... не все действия ведут себя так, что они уничтожаются при нажатии кнопки "Назад". Когда пользователь начинает проигрывать музыку в музыкальном приложении, а затем нажимает "Назад", приложение переопределяет обычное поведение "Назад", предотвращая уничтожение активности проигрывателя, и продолжает проигрывать музыку, даже если его активность больше не видна
Как мне воспроизвести эту функциональность в моем собственном приложении?
Я думаю, должно быть три возможности...
Зафиксируйте нажатие кнопки "Назад" (как показано ниже), а затем вызовите любой метод (ы), который вызывает кнопка "Домой".
Зафиксируйте нажатие кнопки "Назад", а затем подделайте нажатие кнопки "Домой".
Зафиксируйте нажатие кнопки "Назад", затем запустите действие на главном экране, фактически переведя действие моего приложения в остановленное состояние.
Редактировать: я знаю о сервисах и использую один из них в приложении, с которым связана эта проблема. Этот вопрос конкретно касается перевода действия в состояние "остановлено", а не в состояние "уничтожено" при нажатии кнопки "Назад".
Переведено автоматически
Ответ 1
Большую часть времени вам нужно создать сервис для выполнения чего-либо в фоновом режиме, и ваш visible Activity просто управляет этим Service. (Я уверен, что музыкальный проигрыватель работает таким же образом, поэтому пример в документации кажется немного вводящим в заблуждение.) Если это так, то вы Activity можете finish работать как обычно, и Service все еще будет работать.
Более простой подход заключается в том, чтобы зафиксировать Back нажатие кнопки и вызвать moveTaskToBack (true) следующим образом:
// 2.0 and above @Override publicvoidonBackPressed() { moveTaskToBack(true); }
// Before 2.0 @Override publicbooleanonKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); returntrue; } returnsuper.onKeyDown(keyCode, event); }
Я думаю, предпочтительным вариантом должно быть нормальное завершение действия и возможность воссоздания самого себя, например, чтение текущего состояния из службы, если это необходимо. Но moveTaskToBack иногда может использоваться как быстрая альтернатива.
ПРИМЕЧАНИЕ: как указано Дейвом ниже, в Android 2.0 представлен новый onBackPressed метод и эти рекомендации о том, как обращаться с кнопкой "Назад".
Если вы хотите поймать кнопку "Назад", взгляните на этот пост в блоге разработчика Android. В нем описывается более простой способ сделать это в Android 2.0 и наилучший способ сделать это для приложения, работающего на 1.x и 2.0.
Однако, если ваша активность остановлена, она все равно может быть остановлена в зависимости от доступности памяти на устройстве. Если вы хотите, чтобы процесс запускался без пользовательского интерфейса, вам следует создать Service. В документации о сервисах говорится следующее:
Служба не имеет визуального пользовательского интерфейса, а скорее работает в фоновом режиме в течение неопределенного периода времени. Например, служба может воспроизводить фоновую музыку, пока пользователь занят другими делами, или она может извлекать данные по сети или что-то вычислять и предоставлять результат тем действиям, которые в этом нуждаются.
Это кажется подходящим для ваших требований.
Ответ 4
попробуйте переопределить void onBackPressed(), определенный в классе android.app.Activity.