问题
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();
}
来源:https://stackoverflow.com/questions/20379478/android-samsung-s4-html5-video-pauses