10 KiB
Руководство по тестированию Audio Focus
Подготовка к тестированию
Включение логирования
Для отслеживания работы Audio Focus используйте команду:
adb logcat -s PlayerService:I
Или для более подробного логирования:
adb logcat | grep -E "PlayerService|AudioManager"
Тестовые сценарии
1. Тест взаимодействия с другими медиа-приложениями
Цель: Убедиться, что радио не включается автоматически после других приложений
Шаги:
- Запустите приложение SoundWaveRadio
- Выберите и запустите любую радиостанцию
- Убедитесь, что радио воспроизводится
- Откройте YouTube/Spotify/любое другое медиа-приложение
- Запустите воспроизведение видео/музыки
Ожидаемый результат:
- Радио должно остановиться
- Уведомление радио должно исчезнуть
- Сервис PlayerService должен остановиться
- В логах должно быть:
Audio focus lost permanentlyиStopping service gracefully - Радио НЕ должно включиться автоматически после остановки другого медиа
Проверка в логах:
PlayerService: Audio focus changed: -1
PlayerService: Audio focus lost permanently
PlayerService: Audio focus abandoned on stop
PlayerService: Stopping service gracefully
2. Тест временных прерываний (звонки)
Цель: Убедиться, что радио возобновляется после звонка
Шаги:
- Запустите радио
- Позвоните на телефон или используйте эмулятор звонка
- Примите звонок
- Завершите звонок
Ожидаемый результат:
- Во время звонка радио должно остановиться
- После завершения звонка радио должно автоматически возобновиться
- В логах:
Audio focus lost temporarily→Audio focus gained
Проверка в логах:
PlayerService: Audio focus changed: -2
PlayerService: Audio focus lost temporarily
[после звонка]
PlayerService: Audio focus changed: 1
PlayerService: Audio focus gained
3. Тест Ducking (уведомления со звуком)
Цель: Проверить уменьшение громкости при коротких звуках
Шаги:
- Запустите радио
- Получите уведомление со звуком (например, от мессенджера)
Ожидаемый результат:
- Громкость радио должна уменьшиться до 20%
- После окончания звука уведомления громкость должна восстановиться до 100%
- Радио не должно останавливаться
Проверка в логах:
PlayerService: Audio focus changed: -3
PlayerService: Audio focus lost, can duck
[после уведомления]
PlayerService: Audio focus changed: 1
PlayerService: Audio focus gained
4. Тест закрытия приложения
Цель: Проверить, что сервис правильно останавливается
Шаги:
- Запустите радио
- Закройте приложение через Recent Apps (свайп вверх)
Ожидаемый результат:
- Если радио воспроизводится: сервис должен продолжить работу
- Если радио на паузе: сервис должен остановиться
Проверка в логах (при воспроизведении):
PlayerService: Task removed, isPlaying: true
PlayerService: Keeping service alive - still playing
Проверка в логах (на паузе):
PlayerService: Task removed, isPlaying: false
PlayerService: Stopping service - not playing
PlayerService: Audio focus abandoned on stop
5. Тест паузы через уведомление
Цель: Проверить освобождение Audio Focus при паузе
Шаги:
- Запустите радио
- Нажмите кнопку паузы в уведомлении
Ожидаемый результат:
- Радио должно остановиться
- Audio Focus должен быть освобожден
- Уведомление должно остаться, но сервис выйдет из foreground режима
Проверка в логах:
PlayerService: Audio focus abandoned on pause
PlayerService: onIsPlayingChanged: false
PlayerService: Audio focus abandoned - playback stopped
6. Тест отключения наушников
Цель: Проверить автоматическую остановку при отключении наушников
Шаги:
- Подключите наушники
- Запустите радио
- Отключите наушники
Ожидаемый результат:
- Радио должно немедленно остановиться
- Это обрабатывается через
setHandleAudioBecomingNoisy(true)в ExoPlayer
7. Тест на Samsung устройствах
Цель: Проверить интеграцию с системой Samsung
Особенности Samsung:
- Samsung имеет собственную реализацию Audio Focus
- Может быть более строгая политика управления фоновыми сервисами
Шаги:
- Выполните все тесты выше на Samsung устройстве
- Проверьте работу с Samsung Music
- Проверьте работу с Bixby
Дополнительная проверка:
- Откройте настройки звука Samsung
- Проверьте, что радио отображается в списке активных медиа-приложений
- Проверьте управление через медиа-панель в шторке уведомлений
8. Тест множественных переключений
Цель: Проверить стабильность при частых переключениях
Шаги:
- Запустите радио
- Быстро переключайтесь между радио и другими медиа-приложениями
- Повторите 5-10 раз
Ожидаемый результат:
- Не должно быть утечек памяти
- Не должно быть зависаний
- Audio Focus должен правильно переключаться
- Не должно быть одновременного воспроизведения
Проверка утечек ресурсов
Проверка Audio Focus
adb shell dumpsys audio | grep -A 20 "Audio Focus"
Убедитесь, что SoundWaveRadio не держит Audio Focus когда не воспроизводится.
Проверка работающих сервисов
adb shell dumpsys activity services | grep PlayerService
Убедитесь, что PlayerService останавливается когда не нужен.
Проверка памяти
adb shell dumpsys meminfo com.yaros.RadioUrl
Следите за ростом памяти при длительной работе.
Известные проблемы и их решения
Проблема: Радио не возобновляется после звонка
Решение: Проверьте, что resumeOnFocusGain правильно устанавливается в true при AUDIOFOCUS_LOSS_TRANSIENT
Проблема: Сервис не останавливается
Решение: Проверьте логи, убедитесь что Audio Focus освобождается во всех необходимых местах
Проблема: Одновременное воспроизведение с другими приложениями
Решение: Убедитесь, что setAudioAttributes(..., false) установлен правильно, и Audio Focus обрабатывается вручную
Автоматизированное тестирование
Для автоматизации можно использовать следующие команды:
Симуляция звонка
adb shell am start -a android.intent.action.CALL -d tel:1234567890
Симуляция уведомления
adb shell cmd notification post -S bigtext -t 'Test' 'Tag' 'Test notification'
Проверка состояния сервиса
adb shell dumpsys activity services com.yaros.RadioUrl/.PlayerService
Чек-лист для релиза
- Все тесты пройдены на Android 8.0+
- Протестировано на Samsung устройстве
- Протестировано на чистом Android (Pixel/эмулятор)
- Нет утечек Audio Focus
- Сервис корректно останавливается
- Нет одновременного воспроизведения
- Работает с наушниками Bluetooth
- Работает с проводными наушниками
- Корректная работа при низком заряде батареи
- Корректная работа в режиме энергосбережения