Android (Samsung S4) HTML5 video pauses

匿名 (未验证) 提交于 2019-12-03 02:05:01

问题:

I am using Android Webview to play html5 videos, including Youtube videos (my own tags and Youtube embedded iFrames). I encountered an issue with Samsung Galaxy S4, on the following scenario:

  1. Play a video.
  2. Press 'back' while/after the video is playing (view closes)
  3. Open the view again and press 'play'.
  4. The video starts to play and immediately pauses. From this moment the same will happen for each video that I'll try to play.

I tried this on a test environment with two kind of Webviews: "regular" Android Webview and HTML5 webview

The only "suspicious" thing I see is an error while pressing the 'back' (Android error):

sendUserActionEvent() mView == null 

Is it a Galaxy S4 issue? An Android issue? Any idea?

tnx, Yaniv

回答1:

It appears that if the AudioService does not have focus when you close the Webview, it is not paused. This causes several issues (another player cannot start playing etc.)

The only solution that worked for me is:

@Override protected void onPause() {     super.onPause();     ((AudioManager)getSystemService(             Context.AUDIO_SERVICE)).requestAudioFocus(                     new OnAudioFocusChangeListener() {                         @Override                         public void onAudioFocusChange(int focusChange) {}                     }, AudioManager.STREAM_MUSIC,                      AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); } 

This will cause the current player to be paused/killed (not sure which) when going down and solve all of the experienced issues/problems.



回答2:

The previous answer isn't worked to me at Android Kitkat, the following answer will work properly on all platforms.

try {         Class.forName("android.webkit.WebView")                 .getMethod("onPause", (Class[]) null)                 .invoke(webView, (Object[]) null);     } catch (ClassNotFoundException cnfe) {         cnfe.printStackTrace();     } catch (NoSuchMethodException nsme) {         nsme.printStackTrace();     } catch (InvocationTargetException ite) {         ite.printStackTrace();     } catch (IllegalAccessException iae) {         iae.printStackTrace();     } catch (NullPointerException nullPointerException) {         nullPointerException.printStackTrace();     } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!