Files
2026-02-05 13:47:39 +03:00

268 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Руководство по тестированию 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
- [ ] Работает с проводными наушниками
- [ ] Корректная работа при низком заряде батареи
- [ ] Корректная работа в режиме энергосбережения