Я обслуживаю видео в веб-виде на Android с помощью Appcelerator Titanium. На iOS это работает как шарм. Но на Android это создает некоторые проблемы. Это происходит неправильно во второй раз, когда активность открывается с помощью веб-представления, содержащего элемент видео html5.
Шаги для воспроизведения:
(Также см. это видео youtube: http://www.youtube.com/watch?v=0MpSpfJNyOk)
В первый раз, когда вы открываете видео/мероприятие с видео html5, он показывает видео, и я могу его воспроизвести. Когда я закрываю окно/активность и открываю новое окно с другим видео, загружается веб-просмотр и загружается видеоигра html5. Но играть невозможно. При нажатии полноэкранной кнопки и одновременном нажатии кнопки воспроизведения/паузы видео начнет воспроизведение в полноэкранном режиме.
При приостановке видео до закрытия действия/окна видео в следующем окне может воспроизводиться.
Видео youtube показывает поведение на Samsung Galaxy Tab 3 10.1 "работает под управлением Android 4.2 с использованием этого тестового проекта https://dl.dropboxusercontent.com/u/1849335/WebviewTest.zip
Вы можете понять, что мне понадобилось время, чтобы понять этот шаблон:)
Контекст:
Я использую 3.2.GA Titanium SDK с этим исправлением (https://github.com/appcelerator/titanium_mobile/pull/5150). В этом изменении они зафиксировали, что метод onPause() всегда должен вызываться в веб-браузере при закрытии операции, иначе процессы плагина будут продолжать воспроизводиться.
Файлы, которые отвечают за это поведение: https://github.com/wienke/titanium_mobile/tree/master/android/modules/ui/src/java/ti/modules/titanium/ui/widget/webview https://github.com/wienke/titanium_mobile/blob/master/android/modules/ui/src/java/ti/modules/titanium/ui/WebViewProxy.java
Любопытно, что люди также видят это поведение без Titanium.
Решение в конечном итоге было предоставлено в этом вопросе:
Android (Samsung S4) видеоролики HTML5
Добавление этого:
pause();
((AudioManager)activity.getSystemService(
activity.AUDIO_SERVICE)).requestAudioFocus(
new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {}
}, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
для метода SDK onPause:
исправлена проблема.
Я подал дефект в Appcelerator. Надеюсь, они вскоре включится в их SDK.