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