Чтобы иметь возможность воспроизводить аудио в фоновом режиме и на основе этого ответа , кажется, что текущая служба Charm Down Видео требует некоторых модификаций, чтобы установить категорию на AVAudioSessionCategory.Playback
.
Один из возможных способов сделать это - изменить applicationDidFinishLaunching
из класса iOS Launcher. Плагин jfxmobile
1.3.16 создает этот модуль запуска здесь .
Таким образом, мы можем изменить этот класс и создать собственную версию плагина jfxmobile
, или, как указано в комментариях к ОП, можно создать пользовательский модуль запуска.
Другой возможный способ - добавить это непосредственно в видеосервис Charm Down, но для этого потребуется скомпилировать новую версию.
Давайте попробуем пользовательский лаунчер, так как он не потребует создания новых версий.
Создание CustomLauncher
Давайте скопируем средство запуска по умолчанию в наш проект, в папку src/ios/java
, так как для этого требуются определенные зависимости для iOS.
Затем добавьте необходимый код для установки опции Playback
, начиная с основного класса:
private static final Class<? extends Application> mainClass = your.package.YourGluonApplication.class;
private static final Class<? extends Preloader> preloaderClass = null;
@Override
public boolean didFinishLaunching(UIApplication application,
UIApplicationLaunchOptions launchOptions) {
// Audio settings to play in background mode ---
try {
AVAudioSession session = AVAudioSession.getSharedInstance();
session.setActive(true);
session.setCategory(AVAudioSessionCategory.Playback);
} catch (NSErrorException nse) {
System.out.println("Error AVAudioSession " + nse);
nse.printStackTrace();
}
// --- End Audio settings
Thread launchThread = new Thread() { ... }
launchThread.setDaemon(true);
launchThread.start();
return true;
}
Использование пользовательского модуля запуска
Как отмечено в классе модуля запуска, пользовательский модуль запуска можно загрузить из файла build.gradle
:
jfxmobile {
downConfig {
version = '3.8.6'
plugins 'display', 'lifecycle', 'statusbar', 'storage', 'video'
}
ios {
javafxportsVersion = '8.60.11'
launcherClassName = 'your.package.CustomLauncher'
infoPList = file('src/ios/Default-Info.plist')
...
}
}
Разрешить фоновый звук
Последний необходимый шаг для воспроизведения звука не только при запуске приложения на переднем плане, но и при переходе на задний план: измените файл plist.
Нам нужно добавить этот ключ в файл Default-info.plist
:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Тест
Давайте добавим mp3-файл к src/main/resources/
, например 1.mp3
, и включим этот вызов в наш код Java:
Services.get(VideoService.class).ifPresent(service -> {
service.getPlaylist().add("1.mp3");
service.play();
});
Время для развертывания на устройстве iOS:
./gradlew launchIOSDevice
Приложение должно воспроизводить звук как в переднем, так и в фоновом режиме, как и ожидалось.