2014-12-06 4 views
1

저는 webview android에서 html5 콘텐츠로 html5 비디오를 재생했습니다. 괜찮아. 비디오는 계속해서 다른 활동으로 옮겼다. 그래서 비디오 활동이 끝났습니다. 그런 다음 비디오 활동에 와서 비디오를 재생하면 비디오가 재생되지 않습니다. 동영상의 미리보기 이미지를 보여줍니다. 동영상의 재생 아이콘을 클릭합니다.하지만 동영상이 재생되지 않습니다. 동영상의 미리보기 이미지가 다시 표시됩니다. 여기 코드를 따르십시오. 동영상은 Android의 Webview에서 한 번만 재생됩니다. 여기 Html5 비디오 로컬은 Android webview에서 작동하지 않습니다.

내 HTML 코드 나에게 도움을 주시기 바랍니다 :

HTML

<body onload="func()"> 
    <video id='video' src='video/real.mp4' controls /></video> 
    <div class="video_player"> 
     <img id="image" src="video/vid.jpg" onclick="playVideo()" style="width:100%;height:100%"/> 
    </div> 

스크립트

<script type="text/javascript"> 
     function func(){ 
      document.getElementById("video").style.display="none"; 

     } 

** 플레이 비디오 기능 **

 function playVideo(){ 
      var myVideo = document.getElementById("video"); 
      myVideo.style.display="block"; 
      document.getElementById("image").style.display="none"; 

      new MediaElement('video', { 
       enablePluginDebug: false, 
       plugins: ['flash','silverlight'], 
       type: '', 
       pluginPath: 'js/johndyer-mediaelement-c4dae2f/', 
       flashName: 'flashmediaelement.swf', 
       silverlightName: 'silverlightmediaelement.xap', 
       defaultVideoWidth: 1280, 
       defaultVideoHeight: 720, 
       pluginWidth: -1, 
       pluginHeight: -1, 
       timerRate: 250, 
       success: function (mediaElement, domObject) { 
        mediaElement.addEventListener('timeupdate', function(e) { 
         var time = mediaElement.currentTime; 
        }, false); 
        mediaElement.play(); 
       }, 
       error: function() { 
       } 
      }); 
     } 
,

** 조치 **

 var videos = document.getElementById("video"); 
     videos.addEventListener("ended",closeVideo,true); 
     function closeVideo(){ 
      //videos.style.display="none"; 
      document.getElementById("image").style.display="block"; 
      document.location.href = "03_video.html" 
     } 

    </script> 
</body> 

난 그냥

+0

코드를 게시하시기 바랍니다. – Shadow

+0

나는 html 코드를 편집하고 제공했다. –

+0

누구든지이 문제를 해결할 수 있도록 도와 주시겠습니까? –

답변

0

이 사용자 정의 HTML5의 웹보기를 사용하여,이 시도 03_video.html 인 HTML 페이지를 다시로드 비디오의 종료 후 수행합니다. 이 문제

public class HTML5WebView extends WebView { 

private Context mContext; 
private MyWebChromeClient mWebChromeClient; 
private View mCustomView; 
private FrameLayout mCustomViewContainer; 
private WebChromeClient.CustomViewCallback mCustomViewCallback; 

private FrameLayout mContentView; 
private FrameLayout mBrowserFrameLayout; 
private FrameLayout mLayout; 

static final String TAG = "HTML5WebView"; 

private void init(Context context) { 
    mContext = context; 
    Activity a = (Activity) mContext; 

    mLayout = new FrameLayout(context); 

    mBrowserFrameLayout = (FrameLayout) LayoutInflater.from(a).inflate(
      R.layout.custom_screen, null); 
    mContentView = (FrameLayout) mBrowserFrameLayout 
      .findViewById(R.id.main_content); 
    mCustomViewContainer = (FrameLayout) mBrowserFrameLayout 
      .findViewById(R.id.fullscreen_custom_content); 

    mLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS); 

    mWebChromeClient = new MyWebChromeClient(); 
    setWebChromeClient(mWebChromeClient); 

    setWebViewClient(new MyWebViewClient()); 

    // Configure the webview 
    WebSettings s = getSettings(); 
    s.setBuiltInZoomControls(true); 
    s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
    s.setUseWideViewPort(true); 
    s.setLoadWithOverviewMode(true); 
    s.setSavePassword(true); 
    s.setSaveFormData(true); 
    s.setJavaScriptEnabled(true); 

    // enable navigator.geolocation 
    s.setGeolocationEnabled(true); 
    s.setGeolocationDatabasePath("/data/data/com.example.vimeotest/databases/"); 

    // enable Web Storage: localStorage, sessionStorage 
    s.setDomStorageEnabled(true); 

    mContentView.addView(this); 
} 

public HTML5WebView(Context context) { 
    super(context); 
    init(context); 
} 

public HTML5WebView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(context); 
} 

public HTML5WebView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(context); 
} 

public FrameLayout getLayout() { 
    return mLayout; 
} 

public boolean inCustomView() { 
    return (mCustomView != null); 
} 

public void hideCustomView() { 
    mWebChromeClient.onHideCustomView(); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     if ((mCustomView == null) && canGoBack()) { 
      goBack(); 
      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

private class MyWebChromeClient extends WebChromeClient { 
    private Bitmap mDefaultVideoPoster; 
    private View mVideoProgressView; 

    @Override 
    public void onShowCustomView(View view, 
      WebChromeClient.CustomViewCallback callback) { 

     HTML5WebView.this.setVisibility(View.GONE); 

     // if a view already exists then immediately terminate the new one 
     if (mCustomView != null) { 
      callback.onCustomViewHidden(); 
      return; 
     } 

     mCustomViewContainer.addView(view); 
     mCustomView = view; 
     mCustomViewCallback = callback; 
     mCustomViewContainer.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onHideCustomView() { 

     if (mCustomView == null) 
      return; 

     // Hide the custom view. 
     mCustomView.setVisibility(View.GONE); 

     // Remove the custom view from its container. 
     mCustomViewContainer.removeView(mCustomView); 
     mCustomView = null; 
     mCustomViewContainer.setVisibility(View.GONE); 
     mCustomViewCallback.onCustomViewHidden(); 

     HTML5WebView.this.setVisibility(View.VISIBLE); 

    } 

    @Override 
    public boolean onConsoleMessage(ConsoleMessage consoleMessage) { 

     return true; 
    } 

    @Override 
    public Bitmap getDefaultVideoPoster() { 

     if (mDefaultVideoPoster == null) { 
      mDefaultVideoPoster = BitmapFactory.decodeResource(
        getResources(), R.drawable.default_video_poster); 
     } 
     return mDefaultVideoPoster; 
    } 

    @Override 
    public View getVideoLoadingProgressView() { 

     if (mVideoProgressView == null) { 
      LayoutInflater inflater = LayoutInflater.from(mContext); 
      mVideoProgressView = inflater.inflate(
        R.layout.video_loading_progress, null); 
     } 
     return mVideoProgressView; 
    } 

    @Override 
    public void onReceivedTitle(WebView view, String title) { 

     ((Activity) mContext).setTitle(title); 
    } 

    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 

     ((Activity) mContext).getWindow().setFeatureInt(
       Window.FEATURE_PROGRESS, newProgress * 100); 
    } 

    @Override 
    public void onGeolocationPermissionsShowPrompt(String origin, 
      GeolocationPermissions.Callback callback) { 
     callback.invoke(origin, true, false); 
    } 
} 

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     // don't override URL so that stuff within iframe can work properly 
     // view.loadUrl(url); 
     return false; 
    } 

    @Override 
    public void onLoadResource(WebView view, String url) { 

     super.onLoadResource(view, url); 
    } 

} 

static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(
     ViewGroup.LayoutParams.MATCH_PARENT, 
     ViewGroup.LayoutParams.MATCH_PARENT); 

}을 해결할 희망

PlayerActvity :

public class VimeoVideoActivity extends Activity { 
private final String TAG = "MainActivity"; 
private HTML5WebView mWebView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // requestWindowFeature(Window.FEATURE_NO_TITLE); 

    mWebView = new HTML5WebView(this); 

    // Auto playing vimeo videos in Android webview 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setAllowFileAccess(true); 
    mWebView.getSettings().setAppCacheEnabled(true); 
    mWebView.getSettings().setDomStorageEnabled(true); 
    mWebView.getSettings().setPluginState(PluginState.OFF); 
    mWebView.getSettings().setAllowFileAccess(true); 
    mWebView.loadUrl("URL"); 
    // mWebView.loadUrl("http://player.vimeo.com/api/examples/simple"); 
    // F mWebView.loadUrl("http://vimeo.com/watch"); 
    // mWebView.loadUrl("http://192.168.1.4:9090/playground.html"); 
    // mWebView.loadUrl("http://ua.brad.is"); 
    setContentView(mWebView.getLayout()); 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 

    mWebView.stopLoading(); 
} 

} 
+0

PluginState.OFF를 사용하는 이유를 이해할 수 없습니까? –

+0

f 플러그인 (예 : Flash!)을 지원할 필요가 없으며 플러그인에 대한 지원을 비활성화하여 애플리케이션 프로세스를 악용하는 벡터로 사용할 수 있습니다. Android WebSettings 클래스는 public deprecated 메소드 인 setPluginsEnabled를 통해 JavaScript 지원을 비활성화하는 데 사용할 수 있습니다. webview = 새 WebView (this); webview.getSettings(). setPluginsEnabled (false); 또는 setPluginState 메소드 webview = new WebView (this); webview.getSettings(). setPluginState (PluginState.OFF); –

+0

하지만이 코드는 내 응용 프로그램에서 작동하지 않습니다. 답장을 보내 주셔서 감사합니다. –

관련 문제