可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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:
- Play a video.
- Press 'back' while/after the video is playing (view closes)
- Open the view again and press 'play'.
- 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(); }