IT_Programming/Android_Java

WebView에서 YouTube 플러그인 동작시키기

JJun ™ 2015. 6. 25. 19:17

 


 

 출처: http://www.androidpub.com/71946

 

 참고: http://googledevkr.blogspot.kr/2013/01/no-webview-required-with-native-youtube.html

         https://developers.google.com/youtube/android/player/

         https://www.youtube.com/yt/dev/ko/api-resources.html

         http://quicket-engineering.tumblr.com/post/50468482450/youtube-api

         http://www.javaro.net/xe/tips/356

         http://www.androidside.com/bbs/board.php?bo_table=b49&wr_id=147537 (업로드 - 포스트의 댓글 참조)

   http://gnujava.com/board/article_view.jsp?article_no=5780&idx_notice=NOTICE_FLAG+DESC%2C&board_no=3 (다른 방식의 업로드)

         http://1004lucifer.blogspot.kr/2015/04/youtube-player-api.html (웹으로 구현할 경우)

 

 

                  

 

 

                   

 

 

 다만 아래의 글은 웹뷰에서 유튜브를 실행시킬 경우에 해당하는 것으로 구현 선택지 중 가장 마지막의 경우에 해당된다. (첫번째 영상)

 유튜브 영상 및 참고 사이트를 통해 구현하시면 가장 깔끔하게 구현하실 것이라 생각됩니다.  

 


 

 

먼저 플러그인을 Enable시키면 유튜브를 포함한 플러그인들이 정상 동작합니다.
mWebView.getSettings().setPluginsEnabled(true);

다만 WebViewClient 에서 shouldOverrideUrlLoading을 오버라이드하게 되면 정상적으로 YouTube플러그인이 동작하지 않는 경우가 있습니다. 

 

 The Web page at file:///android_asset/webkit/  could not be loaded as: 라는 에러가 뜹니다.

 

 

shouldOverrideUrlLoading 에서 대부분의 경우 http만 처리하시면 될테니 http에서만 작업을 처리하고
나머지 작업은 기본적으로 작동하게 되어있는 방식 그대로 동작하게 만들어주면 플러그인이 제대로 동작합니다

 

 

 mWebView.setWebViewClient(new WebViewClient()  
 {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String overrideUrl)
        {
if (overrideUrl.startsWith("http://"))  
                { //
doSomething
                        return true; } 
                else  
                { boolean override = false; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(overrideUrl)); intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.putExtra(Browser.EXTRA_APPLICATION_ID, getPackageName()); try
                        { startActivity(intent); override = true;                      }
                        catch (ActivityNotFoundException ex) {
                        } return override;
}
}
 );