2011-02-14 17 views
4

私はSDカード内のローカルHTMLをロードし、そしてこのHTMLでは、私はタグの使用:アンドロイドでウェブビューで動画を再生する方法は?

<video id="myvideo" controls width="120" height="60" poster="img/img01.jpg" src="video/01.mp4"></video> 

をして、私はタグを無効にしたときに、私は、このHTMLをロードされていなかった:, HTMLが正常に動作していることがわかっ、私はこれを私のアンドロイドavd(2.2)でテストしましたか?

+1

この[リンク]あなたのissue.Butを解決するのに役立ち、まだそれが言及されているいくつかの問題を持っています(http://stackoverflow.com/questions/3815090/webview-and-html5-video)リンクに –

答えて

1

これはすでに使用している2.xバージョンで動作するはずです。 docは、ブラウザが全画面表示のときにタグが機能すると述べています。

あなたのwebviewでもサポートされていますが、フルスクリーンである必要があります。 これを試してください。

EDIT(でも、私はこれを試していない):ビューがフルスクリーンに行くようにするには、あなたはこれを試すことがあります。

requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
+0

ありがとうございます!ブラウザをフルスクリーンにする方法は?そして今、私がロードしたhtmlページが大きすぎるので、私はすべてのページを見たいときにスクロールバーを使ってコントロールしなければなりません。そして、ロードしたhtnlページを私のwebviewにautosizeして、webviewを全画面にしますか? – jin

+0

全画面にするための編集済みの回答を参照 –

+0

誰でもこの回答に基づいて動作させましたか?それは私にとってはうまくいかない。ところで、私はリンクされたドキュメントのフルスクリーンについてのメッセージも見つけられませんでした。 – newman

8

まず第一には、エンコーディングを気に。ここにはarticle with a working exampleと、Androidウェブキットの動画をエンコードするためのガイドラインがあります。

そして、私はこの問題に直面しなければならなかった時、ちょっと調べて役に立つ回答を見つけなければなりませんでした。基本的には、このコードはあまりandroid project source code of the browserに触発されて、ビデオをネイティブブラウザだから

public class InredisChromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener { 
    private InterfazWebInredis interfazWeb; // Use Your WebView instance instead 

    private VideoView mCustomVideoView; 

    private LinearLayout mContentView; 
    private FrameLayout mCustomViewContainer; 
    private WebChromeClient.CustomViewCallback mCustomViewCallback; 
    private LinearLayout mErrorConsoleContainer; 
    static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
      ViewGroup.LayoutParams.FILL_PARENT, 
      ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER); 

    public InredisChromeClient(InterfazWebInredis iwi) { 
     super(); 
     this.interfazWeb = iwi; 
    } 

    public void onShowCustomView(View view, CustomViewCallback callback) { 
     // super.onShowCustomView(view, callback); 
     if (view instanceof FrameLayout) { 
      mCustomViewContainer = (FrameLayout) view; 
      mCustomViewCallback = callback; 
      mContentView = (LinearLayout) interfazWeb.findViewById(R.id.mainContainer); 
      if (mCustomViewContainer.getFocusedChild() instanceof VideoView) { 
       mCustomVideoView = (VideoView) mCustomViewContainer.getFocusedChild(); 
       // frame.removeView(video); 
       mContentView.setVisibility(View.GONE); 
       mCustomViewContainer.setVisibility(View.VISIBLE); 
       interfazWeb.setContentView(mCustomViewContainer); 
       mCustomVideoView.setOnCompletionListener(this); 
       mCustomVideoView.setOnErrorListener(this); 
       mCustomVideoView.start(); 
      } 
     } 
    } 

    public void onHideCustomView() { 
     if (mCustomVideoView == null) 
      return; 
     // Hide the custom view. 
     mCustomVideoView.setVisibility(View.GONE); 
     // Remove the custom view from its container. 
     mCustomViewContainer.removeView(mCustomVideoView); 
     mCustomVideoView = null; 
     mCustomViewContainer.setVisibility(View.GONE); 
     mCustomViewCallback.onCustomViewHidden(); 
     // Show the content view. 
     mContentView.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     mp.stop(); 
     mCustomViewContainer.setVisibility(View.GONE); 
     onHideCustomView(); 
     interfazWeb.setContentView(mContentView); 
    } 

    @Override 
    public boolean onError(MediaPlayer mp, int what, int extra) { 
     interfazWeb.setContentView(R.layout.main); 
     return true; 
    } 
} 

を行う道を開く必要があります。

これは、ビデオフルスクリーンを開いている動作です。私はそれがウェブページ内のそれ自身のフレームでビデオを再生することが可能かどうか分からない。しかし、この解決策は私のためのトリックをした、私もあなたのために願っています。

よろしく

+2

WebViewオブジェクトではどのようにsetContentViewを設定しますか?私は何かを見逃していると思う – powerj1984

+0

@ powerj1984デフォルトでは、ビデオリンクをクリックすると、WebViewは新しいウィンドウでそれを開こうとするので、プラットフォームはそれを行います。彼らがこの行動を変えたかどうかはわかりません。それはFroYoでどのように働いたのかです。 – mdelolmo

+0

私はこれが古いと知っていますが、実際にはsetContentView呼び出しも受けません。 setContentViewは、WebViewの機能でも、その親でもありません。あなた自身でこれを実装しましたか?このプロジェクトの完全なソースを提供することは可能でしょうか?とても感謝しております。 – FuegoFingers

関連する問題