У меня есть приложение для Android, которое изменяет громкость звонка на максимум и восстанавливает громкость при выходе или нажатии кнопки домой. Вот фрагмент кода.
int ringMode;
int ringVolume;
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
changeRingtone();
}
@Override
protected void onResume() {
changeRingtone();
}
private void changeRingtone() {
ringVolume = audioManager.getStreamVolume(audioManager.STREAM_RING);
ringMode = audioManager.getRingerMode();
audioManager.setStreamVolume(audioManager.STREAM_RING,
audioManager.getStreamMaxVolume(audioManager.STREAM_RING),
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
@Override
protected void onPause() {
audioManager.setStreamVolume(audioManager.STREAM_RING, ringVolume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
audioManager.setRingerMode(ringMode);
super.onPause();
}
Теперь проблема в том, что при первом запуске приложения (вызывается onCreate()
) оно изменяет громкость на максимальный, но не восстанавливает его до предыдущего объема в onPause()
. Однако, если приложение запускается с помощью onResume()
(означает, что приложение работало в фоновом режиме), оно изменит громкость на максимум и восстановит ее до предыдущей громкости в onPause()
.
Код вроде в порядке, но я несколько дней не понимал, в чем проблема, пожалуйста, помогите, спасибо!
3 ответа
В соответствии с жизненным циклом Android Activity
, вы вызываете метод changeRingtone()
дважды, вы должны вызывать этот метод только в своем методе onResume
.
Цитата эту статью из официального обучения Android:
По умолчанию система использует состояние экземпляра Bundle для сохранения информации о каждом объекте View в макете действия (например, текстовое значение, введенное в объект EditText). Итак, если ваш экземпляр активности уничтожен и воссоздан, состояние макета будет восстановлено до предыдущего состояния без кода, необходимого вам. Однако в вашей деятельности может быть больше информации о состоянии, которую вы хотели бы восстановить, например, переменные-члены, которые отслеживают прогресс пользователя в действии.
Для получения дополнительных объяснений ознакомьтесь также с этим сообщением на StackOverFlow.
On Pause будет звонить, когда после запуска вашей активности и между ними приходит телефонный звонок.
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.