Реализация 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.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, так и в полноэкранном режиме.

EDIT https://github.com/novemberox/VideoFail вот пример проекта с этой ошибкой вы также можете открыть его на эмуляторе, поэтому вам не нужно иметь настоящее устройство.


person Mikooos    schedule 27.08.2011    source источник
comment
это весь стек? Знаете ли вы, какая строка вашего метода вызывает исключение NullPointerException?   -  person slayton    schedule 20.09.2011
comment
Вы также видели этот отчет об ошибке: code.google.com/p/ android/issues/detail?id=10789   -  person slayton    schedule 20.09.2011
comment
Ну, это была пустая трата 50 повторений (неудачная награда) :/. Никто ничего не знает об этом?   -  person Sven Viking    schedule 28.09.2011


Ответы (2)



Не забудьте включить аппаратное ускорение!

Его можно найти по адресу: страница Android Developer WebView.

Поддержка видео HTML5

Для поддержки встроенного видео HTML5 в вашем приложении необходимо включить аппаратное ускорение и установить WebChromeClient. Для поддержки полноэкранного режима требуются реализации onShowCustomView(View, WebChromeClient.CustomViewCallback) и onHideCustomView(), getVideoLoadingProgressView() является необязательным.

Так что добавьте это в свой AndroidManifest.xml

<application 
  android:hardwareAccelerated="true" 
person Megaman    schedule 27.12.2012
comment
Хороший совет, но я не уверен, что это отвечает на его вопрос. - person Peter Oram; 27.12.2012