마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

webview동영상 로딩질문입니다.도와주세요~~~~~~~~

0 추천

안녕하세요. 초보개발자입니다.

현재 service에서 webview를 생성해서 로직을 구현햇는데요..

windowmanager에 webview를 add시켯습니다..

문제는 동영상부분인데요.. 소리는 나오나.. 동영상이 나오질않네요..

네이버나 기기에 내장되어잇는 인터넷을 실행햇을경우엔.. 유투브 동영상을클릭하면

아예 다른 창이 나와 동영상을 띄워주는 것같더군요..

저도 그방식이랑 비슷하게 동영상을 클릭한후 url을 따와서 동영상을 재생하고 싶은데요..

아무리 해봐도 동영상을 클릭햇을때 url이 넘어오는 곳을 찾지못하겟습니다..

뭔가 방법이 있을것같은데.. 고수분들의 조언을 구합니다..

webview셋팅은 이렇게 했습니다.

 

mWebview.setFocusableInTouchMode(true);
  mWebview.requestFocus(View.FOCUS_DOWN);
  mWebview.setWebViewClient(new WebViewClient(){
      
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
     // TODO Auto-generated method stub
     view.loadUrl(url);
     Log.d("ErrorLog", url);
     murl = url;
     
     return true;
    }
    @Override
    public void onPageFinished(WebView view, String url) {
     
     Bar.setVisibility(View.INVISIBLE);
     if(mWebview == null){
      return;
     }else{
      edittext.setText(mWebview.getUrl());
      if(view.getProgress() == 100){
       bwebviewflag = true;
        Log.d("ErrorLog", "progress = " + view.getProgress());
	}
     }
     
     super.onPageFinished(view, url);
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
     super.onPageStarted(view, url, favicon);
     Bar.setVisibility(View.VISIBLE);
    }
  
    
        });
        
     
     mWebview.setWebChromeClient(new WebChromeClient(){
      
      @Override
      public void onProgressChanged(WebView view , int newProgress) {
       Bar.setProgress(newProgress);
      }
 
   @Override
    
   public void onShowCustomView(View view, CustomViewCallback callback) {
    super.onShowCustomView(view, callback);
    
    Log.d("ErrorLog", "on showcustomview in");
    
   }
   
   @Override
   public Bitmap getDefaultVideoPoster() {
    // TODO Auto-generated method stub
    Log.d("ErrorLog", "on getDefaultVideoPoster in");
    
    return super.getDefaultVideoPoster();
    
   }
   
   @Override
   public void onHideCustomView() {
    // TODO Auto-generated method stub
    super.onHideCustomView();
    Log.d("ErrorLog", "on onHideCustomView in");
   }
 
     });
     
//     
     
     mWebview.getSettings().setJavaScriptEnabled(true);
     mWebview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
     mWebview.getSettings().setBuiltInZoomControls(true);
     mWebview.getSettings().setPluginState(PluginState.ON);
     
     mWebview.getSettings().setSupportMultipleWindows(true);
     mWebview.getSettings().setSupportZoom(true);
//     mWebview.getSettings().setBlockNetworkImage(false);
     mWebview.getSettings().setLoadsImagesAutomatically(true);
     mWebview.getSettings().setUseWideViewPort(true);
     mWebview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
     mWebview.getSettings().setDomStorageEnabled(true);
     
     mWebview.setClickable(true);
     mWebview.setFocusable(true);
     mWebview.setFocusableInTouchMode(true);
     mWebview.setLongClickable(true);
     
     mWebview.getSettings().setGeolocationEnabled(true);
     mWebview.getSettings().setDatabaseEnabled(true);
     mWebview.loadUrl(murl);
     edittext.setText(murl);
     mWebview.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
     wm.addView(WebLayout, params);

 

mamongs (4,050 포인트) 님이 2014년 2월 18일 질문

3개의 답변

0 추천
웹뷰의 비디오를 클릭했을 때

 

shouldOverrideUrlLoading 이 호출될 겁니다. 그 메소드안에 url을 체크해서 youtube의 것이면 유투브 앱을 실행하면 방법을 쓰면 될 것 같네요.

 

여기를 참고하세요.

 

http://stackoverflow.com/a/20816429
방귀과장 (18,940 포인트) 님이 2014년 2월 18일 답변
shouldOverrideUrlLoading 로 값이 안들어오네요..이휴..ㅠㅠ
0 추천
shouldOverrideUrlLoading 이 호출되는 경우는 따로 있어요.

a 태그였던가.. location.href 였던가...? ;; 아무튼 뭐 있었어요.. 찾아보세요.

[참고] http://www.catchingtales.com/android-webview-shouldoverrideurlloading-and-redirect/416/

그라고 해당 메소드는 Android OS 버전에 따라 다르게 호출되기도 합니다.

같은 방법을 쓰더라도 어떤 버전에서는 되고 어떤 버전에서는 안되고.... 거지같았어요.. 요즘은 어떤지 모르겠지만..

 

정 shouldOverrideUrlLoading 호출이 안된다면.. 별 수 없이 onPageStarted 부분에서

유튜브앱이라던지 동영상 플레이어 리스트를 띄워서 사용자가선택할 수 있게 처리 하시는게 어떨까 싶네요.
몽쉘몽쉘 (860 포인트) 님이 2014년 2월 21일 답변
몽쉘몽쉘님이 2014년 2월 21일 수정
0 추천
shouldOverrideUrlLoading 메서드, 즉 그러니까 안드로이드 WebView 영역에서 캐치를 못하는 javascript 코드가 종종 있습니다.

 

그 중 대표적인게

location.href='/main.do'

이와 같은 스크립트에서 직접 리다이렉팅 하는 코드는 아예 인식을 못합니다.

 

html 웹 코드에서 <form /> 태그를 쓰셔서 버튼에 submit을 날리는 형태로 코딩형태를 변경하시면 shouldOverrideUrlLoading내에서 catch가 가능합니다.
journey (520 포인트) 님이 2014년 3월 19일 답변
...