2012-09-07 5 views
5

HTML 비디오가있는 webview가 있습니다. 이 비디오를 전체 화면으로 표시하여 의 onShowCustomView을 덮어 쓰려면 VideoView을 사용하십시오. 2.3에서는 훌륭하지만, 4.x onShowCustomView에서는 절대로 호출되지 않습니다. 비디오는 여전히 재생되지만 재생 및 정지를 클릭하는 것 외에는 아무런 제어없이 웹보기에서 재생됩니다.HTML5 비디오 전체 화면 표시

또한 hardwareAccelerated = "true"입니다.

onShowCustomView이 호출되지 않는 이유는 무엇입니까?

@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 (불쌍한 내 영어에 죄송합니다)이 무엇인지는 문제가 될 수도 2.3.6에서 수 호출되고되지 않는 이유는 무엇입니까? – Abhi

답변

9

잠시 동안 고생하고 나자 마침내 원인을 발견했습니다. Android 4.x에서는 'video'태그의 html 'controls'속성을 사용하여 컨트롤을 표시해야합니다. 이러한 컨트롤을 표시하면 전체 화면 버튼을 클릭하여 'onShowCustomView'를 호출 할 수 있습니다. 임베디드 비디오는 4.x에서 사용할 수 있고 컨트롤로 전체 화면으로 이동할 수 있으므로 onShowCustomView는 자동으로 재생시 호출되지 않습니다. 안타깝게도 이것은 안드로이드 문서에서 잘 설명되어 있지 않습니다.

+4

다른 방법으로'onShowCustomView'를 호출 할 수 있습니까? 'VideoView' 객체에 대한 참조가 필요하지만 4.x 이후에는 얻을 수 없습니다 – manelizzard

+2

onShowCustomView가 호출 되더라도 4.x에서 전달 된 것은 더 이상 VideoView가 아니라 대신 SurfaceView입니다. – Bilthon

+2

onShowCustomView 호출을 강제로 수행하는 방법에 대한 업데이트가 있습니까? –

0

나를 위해 작동합니다.

vimeo 비디오를 사용하여 웹 응용 프로그램을 만드는 데 '특이한 솔루션'을 발견했습니다. 두 개의 장치를 테스트했습니다. 하나는 안드로이드 4.2.x 버전이고 다른 버전은 4.4.x 버전입니다. 하나는 전체 화면 모드로 비디오를 재생할 수 있고 다른 하나는 재생할 수 없습니다.

공식 문서 'Migrating to WebView in Android 4.4'을 읽은 후 두 장치에 서로 다른 'UserAgent'이름이 있음을 발견했습니다.

하나는 userAgent입니다.

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 

또 하나 있습니다.

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 

크롬 버전은 전체 화면 비디오를 만드는 솔루션이라고 생각합니다. 그래서 크롬 버전을 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); 

아 ~~ 내가 잘 수 ...

관련 문제