如何防止React Native Android Webview在后台运行Youtube?

时间:2016-04-03 07:55:07

标签: android webview react-native

我的应用在Play商店被拒绝“确保无法启用YouTube视频的后台播放”。我使用了基本的Webview组件并加载了一个youtube页面。播放YouTube电影后,返回主页,youtube电影继续在后台播放。

当应用程序暂停时,如何获得暂停Webview的句柄?

3 个答案:

答案 0 :(得分:7)

您可以使用react-native:documentation中的 AppState

仅在应用状态为“有效”时显示网页视图(其中包含您的YouTube嵌入版)

import React, {Component} from 'react'
import {AppState, WebView} from 'react-native'

class AppStateExample extends Component {

  state = {
      appState: AppState.currentState
  }

  componentDidMount() {
      AppState.addEventListener('change', this._handleAppStateChange);
  }

  componentWillUnmount() {
      AppState.removeEventListener('change', this._handleAppStateChange);
  }

  _handleAppStateChange = (nextAppState) => {        
      this.setState({appState: nextAppState});
  }

  render() {

    return (

      {this.state.appState == 'active' &&
           <WebView />
      }

    )

  }

}

如果您使用 Expo ,则无需触及任何本机代码即可。

答案 1 :(得分:2)

好的,所以我最终创建了自己的MyReactWebViewManager

public class MyReactWebViewManager extends SimpleViewManager<WebView> {

private static final String REACT_CLASS = "RCTMyWebView";

....

在其中,我使用以下onHostPause覆盖创建了MyReactWebView

private static class MyReactWebView extends WebView implements LifecycleEventListener { 
    ...

    @Override
    public void onHostResume() {
        // do nothing
        Log.i(REACT_CLASS,"onHostResume");
        this.onResume();
    }

    @Override
    public void onHostPause() {
        // do nothing
        Log.i(REACT_CLASS,"onHostPause");
        this.onPause();
    }

希望将来可以通过react-native处理。

答案 2 :(得分:0)

只需将此道具添加到网络视图

即可

mediaPlaybackRequiresUserAction = {TRUE}

 <WebView
   mediaPlaybackRequiresUserAction={true}
 />