2013-08-22 1 views
0

Google에서 많은 자습서를 찾았지만 실제로 답변을 얻지는 못했습니다. YouTube 앱을 사용하는 대신 WebView에서 동영상을 재생하고 싶습니다. 어떤 도움이라도 굉장합니다. 감사.Android에서 WebView를 사용하여 Youtube 비디오를 재생할 수 있습니까?

코드 :

public class Youtube extends Activity { 
WebView myWebView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.website); 

    myWebView = (WebView) findViewById(R.id.webView); 
    myWebView.loadUrl("http://www.youtube.com"); 

    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    myWebView.addJavascriptInterface(new WebAppInterface(this), "Android"); 
    myWebView.setWebViewClient(new WebViewClient()); 
    myWebView.getSettings().setBuiltInZoomControls(true); 
    myWebView.getSettings().setSupportZoom(true); 
    myWebView.getSettings().setUseWideViewPort(true); 
    myWebView.getSettings().setLoadWithOverviewMode(true); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
} 

public class WebAppInterface { 
    Context mContext; 

    /** Instantiate the interface and set the context */ 
    WebAppInterface(Context c) { 
     mContext = c; 
    } 

    /** Show a toast from the web page */ 
    @JavascriptInterface 
    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
    } 

    private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (Uri.parse(url).getHost() 
        .equals("http://www.youtube.com")) { 
       // This is my web site, so do not override; let my WebView 
       // load the page 
       return false; 
      } 
      // Otherwise, the link is not for a page on my site, so launch 
      // another Activity that handles URLs 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 

    } 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
     myWebView.goBack(); 
     return true; 
    } 
    // If it wasn't the Back key or there's no web page history, bubble up 
    // to the default 
    // system behavior (probably exit the activity) 
    return super.onKeyDown(keyCode, event); 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     NavUtils.navigateUpFromSameTask(this); 

     return true; 
    default: 
     return super.onOptionsItemSelected(item); 

    } 
} 
} 
+0

그것이 WebView를해야합니까? https://developers.google.com/youtube/android/player? –

+0

네, 그렇습니다. 4.2+가 필요합니다. ICS +가 필요합니다. 또한 단일 비디오가 아닌 채널을로드하고 싶습니다. 시도해 줘서 고마워. :) – user2407147

+0

** 안드로이드가 아닌 ** YouTube **의 4.2 버전입니다. 내가 연결된 페이지에서 : * 일반적으로 Google Play 스토어 앱이 설치된 Android 2.2 (Froyo) 이상을 실행하는 기기는 며칠 이내에 업데이트를 받게됩니다. 결과적으로 애플리케이션은 YouTube Android Player API를 사용하여 Android 생태계의 대부분 기기에 연결할 수 있습니다. * –

답변

1

사용하여 새 YouTube 안드로이드 플레이어 API - https://developers.google.com/youtube/android/player

"API를로드 및 재생 YouTube 동영상 (및 재생 목록)과 사용자 정의 및 비디오 재생을 제어하는 ​​방법을 정의 경험. "

채널을 사용하는 경우 일반 YoutTube API를 사용하여 메타 데이터를 가져오고 플레이어 API로 동영상/재생 목록을 재생할 수 있습니다. 웹보기 컨트롤의 인스턴스를 얻을 수는 MainActivity에서

을하고 문자열로 삽입 YouTube 동영상의 iframe이 코드를 변환 :

+0

나에게이 작업을 수행하는 방법의 예를 보여 주실 수 있습니까, 미안하지만 초보자 만 가능합니다. – user2407147

+0

필자는 한번도 사용해 본 적이 없지만 문서는 아주 광범위합니다. 심지어 몇 가지 샘플 앱이 있습니다. https://developers.google.com/youtube/android/player/sample-applications –

0

친절 레이아웃의 XML 파일에 웹보기를 정의한 후이 코드 주위에 작업을하려고합니다. 그런 다음 Javascript를 활성화하고 WebView의 loaddata()를 사용하여 비디오 iFrame 문자열을 webview 인스턴스에로드합니다.

public class MainActivity extends ActionBarActivity { 

    private MyWebChromeClient mWebChromeClient = null; 
    private View mCustomView; 
    private RelativeLayout mContentView; 
    private FrameLayout mCustomViewContainer; 
    private WebChromeClient.CustomViewCallback mCustomViewCallback; 

    private WebView myWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myWebView = (WebView) findViewById(R.id.webView); 
     mWebChromeClient = new MyWebChromeClient(); 
     myWebView.setWebChromeClient(mWebChromeClient); 
     myWebView.setWebViewClient(new WebViewClient(){ 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       return false; 
      } 
     }); 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     myWebView.loadUrl("https://www.youtube.com/watch?v=7bDLIV96LD4"); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
    public class MyWebChromeClient extends WebChromeClient { 

     FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); 

     @Override 
     public void onShowCustomView(View view, CustomViewCallback callback) { 
      // if a view already exists then immediately terminate the new one 
      if (mCustomView != null) { 
       callback.onCustomViewHidden(); 
       return; 
      } 
      mContentView = (RelativeLayout) findViewById(R.id.activity_main); 
      mContentView.setVisibility(View.GONE); 
      mCustomViewContainer = new FrameLayout(MainActivity.this); 
      mCustomViewContainer.setLayoutParams(LayoutParameters); 
      mCustomViewContainer.setBackgroundResource(android.R.color.black); 
      view.setLayoutParams(LayoutParameters); 
      mCustomViewContainer.addView(view); 
      mCustomView = view; 
      mCustomViewCallback = callback; 
      mCustomViewContainer.setVisibility(View.VISIBLE); 
      setContentView(mCustomViewContainer); 
     } 

     @Override 
     public void onHideCustomView() { 
      if (mCustomView == null) { 
       return; 
      } else { 
       // Hide the custom view. 
       mCustomView.setVisibility(View.GONE); 
       // Remove the custom view from its container. 
       mCustomViewContainer.removeView(mCustomView); 
       mCustomView = null; 
       mCustomViewContainer.setVisibility(View.GONE); 
       mCustomViewCallback.onCustomViewHidden(); 
       // Show the content view. 
       mContentView.setVisibility(View.VISIBLE); 
       setContentView(mContentView); 
      } 
     } 
    } 
    @Override 
    public void onBackPressed() { 
     if (mCustomViewContainer != null) 
      mWebChromeClient.onHideCustomView(); 
     else if (myWebView.canGoBack()) 
      myWebView.goBack(); 
     else 
      super.onBackPressed(); 
    } 
} 

전체 튜토리얼은 여기에서 찾을 수 : http://inducesmile.com/android/how-to-play-youtube-video-inside-android-webview-using-video-url/

관련 문제