Внедрение onShowCustomView на Android 3.1 исключает исключение в HTML5VideoFullScreen
Я пытаюсь воспроизвести видео в html на полноэкранном режиме. Когда я нажимаю на полноэкранную кнопку в видео-методе onShowCustomView, запускается. Вот моя реализация:
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
if (view instanceof FrameLayout) {
customComponenet.addView(view, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT,
Gravity.CENTER));
customComponenet.setVisibility(View.VISIBLE);
}
}
Если customComponenet - это FrameLayout, помещенный поверх моего текущего макета. Wideo играет хорошо, он виден и все швы, чтобы быть в порядке, но он бросает:
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): FATAL EXCEPTION: main
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): java.lang.NullPointerException
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoFullScreen.switchProgressView(HTML5VideoFullScreen.java:320)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoView.setPlayerBuffering(HTML5VideoView.java:319)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoView.start(HTML5VideoView.java:85)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoViewProxy$VideoPlayer.onPrepared(HTML5VideoViewProxy.java:257)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoViewProxy.onPrepared(HTML5VideoViewProxy.java:278)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoView.onPrepared(HTML5VideoView.java:265)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.webkit.HTML5VideoFullScreen.onPrepared(HTML5VideoFullScreen.java:164)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1456)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.os.Looper.loop(Looper.java:132)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at android.app.ActivityThread.main(ActivityThread.java:4028)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at java.lang.reflect.Method.invoke(Method.java:491)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
08-27 22:16:07.520: ERROR/AndroidRuntime(7235): at dalvik.system.NativeStart.main(Native Method)
Что я делаю неправильно?
Настройки моего WebView:
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginState(PluginState.ON);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabasePath("/data/data/" + App.class.getPackage().getName() + "/databases");
webView.getSettings().setSupportZoom(false);
Я тестирую Galaxy Tab 10.1, в браузере по умолчанию это работает отлично. Я могу переключиться на полноэкранный режим. Более того, в моем приложении, когда я воспроизвожу видеоизображение, я могу слышать только звук и видеть строку состояния ниже области, где должно быть видео, а в браузере я вижу видео, как встроенное в WebView, так и полноэкранное.
ИЗМЕНИТЬ
https://github.com/novemberox/VideoFail Вот пример проекта с этой ошибкой, вы можете открыть его и на эмуляторе, так что вам не нужно иметь реальное устройство.
Ответы
Ответ 1
NPE выглядит как ошибка в HTML5VideoFullScreen, хотя я не смог воспроизвести его с помощью своего эмулятора.
Возможно, HTML5VideoFullScreen ожидает ненулевой вид из WebChromeClient # getVideoLoadingProgressView. Попробуйте переопределить этот метод, чтобы вернуть ненулевой объект View (например, фиктивный вид 0x0 в вашем макете) и посмотреть, не сработали ли вы.
Ответ 2
Не забудьте включить аппаратное ускорение!
Вы можете найти это на:
Страница разработчика Android Developer
Поддержка HTML5 Видео
Чтобы поддерживать встроенное видео HTML5 в вашем приложении, вам необходимо включить аппаратное ускорение и установить WebChromeClient. Для полноэкранной поддержки необходимы реализации onShowCustomView (View, WebChromeClient.CustomViewCallback) и onHideCustomView(), getVideoLoadingProgressView() является необязательным.
Поэтому добавьте это в свой AndroidManifest.xml
<application
android:hardwareAccelerated="true"