2012-09-07 64 views
5

Tôi có một webview có video html bên trong nó. Tôi muốn hiển thị toàn màn hình video này để tôi ghi đè onShowCustomView trong số WebChromeClient của mình để sử dụng VideoView. Điều này làm việc tuyệt vời trong 2,3, tuy nhiên, trong 4.x onShowCustomView không bao giờ được gọi. Video vẫn sẽ phát, tuy nhiên, nó được phát từ trong chế độ xem web mà không có bất kỳ điều khiển nào ngoài việc nhấp để phát và dừng.Hiển thị HTML5 Video toàn màn hình

Ngoài ra, tôi có phần cứngAccelerated = "true".

Bất kỳ ý tưởng nào tại sao onShowCustomView không bao giờ được gọi?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    webView = (WebView) findViewById(R.id.webView); 

    webView.getSettings().setSupportZoom(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
    webView.setWebViewClient(new WebViewClient()); 
    webView.setWebChromeClient(new MyChromeClient()); 

    webView.loadUrl(URL); 

} 

private class MyChromeClient extends WebChromeClient implements 
     OnCompletionListener, OnErrorListener, OnPreparedListener { 

    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     Log.d("ma", "onShowCustomView"); 
    } 

... 
+0

onShowCustomView không được gọi trong 2.3.6 cũng có, những gì có thể vấn đề này? – Abhi

Trả lời

9

Sau khi đấu tranh với điều này một lúc, cuối cùng tôi đã tìm ra nguyên nhân. Trong Android 4.x, bạn phải hiển thị các điều khiển bằng cách sử dụng thuộc tính html 'controls' trong thẻ 'video'. Khi bạn đang hiển thị các điều khiển này, bạn có thể nhấp vào nút toàn màn hình, sau đó sẽ gọi 'onShowCustomView'. Vì video nhúng có sẵn trong 4.x và bạn có tùy chọn để chuyển sang chế độ toàn màn hình bằng các nút điều khiển, onShowCustomView sẽ không được gọi tự động khi phát. Thật không may, điều này là rất kém tài liệu trong tài liệu Android.

+4

Không phải là cách nào khác để có được 'onShowCustomView' được gọi là? Tôi cần tham chiếu đến đối tượng 'VideoView', nhưng sau 4.x tôi không thể lấy nó – manelizzard

+2

Thậm chí nếu bạn quản lý để có được onShowCustomView được gọi, lưu ý rằng trong 4.x những gì được thông qua không phải là một VideoView nữa mà thay vào đó là SurfaceView – Bilthon

+2

Mọi cập nhật về cách buộc gọi onShowCustomView? –

0

Điều này phù hợp với tôi.

Tôi đã tìm thấy 'giải pháp quirks' trong việc tạo ứng dụng web bằng video vimeo. Tôi đã thử nghiệm hai thiết bị. Một là phiên bản Android 4.2.x, phiên bản 4.4.x khác. Người ta có thể chơi video ở chế độ toàn màn hình, người khác không thể.

Sau khi đọc tài liệu chính thức 'Migrating to WebView in Android 4.4', tôi thấy rằng có các tên 'UserAgent' khác nhau trong hai thiết bị.

Một người dùng này có tài khoản.

Mozilla/5.0 (Linux; Android 4.4.2; SHV-E300L Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 

Loại khác có điều này.

Mozilla/5.0 (Linux; Android 4.4.4; SHV-E370K Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 

Tôi nghĩ phiên bản chrome là giải pháp tạo video toàn màn hình. Vì vậy, tôi đã thay đổi phiên bản chrome thành 30.x.

WebSettings s = mWebView.getSettings(); 
//Change UserAgent to play fullscreen vimeo's videos. 
String agent = s.getUserAgentString(); 
String p = "(Chrome/[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)"; 
Pattern pattern = Pattern.compile(p); 
Matcher matcher = pattern.matcher(agent); 
if(matcher.find()) { 
    agent = matcher.replaceFirst("Chrome/30.0.0.0"); 
} 
s.setUserAgentString(agent); 

Oh ~~ tôi có thể ngủ ... (xin lỗi với người nghèo tiếng anh của tôi)

Các vấn đề liên quan