2013-08-22 53 views
0
发挥使用的WebView YouTube视频

我已经走了,虽然在谷歌发现,没有一个答案很多教程真正发挥作用。我希望视频能够在WebView中播放,而不是通过YouTube应用播放。任何帮助都是极好的。谢谢。是否有可能在Android的

代码:

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版本,不是Android。从页面我联系:*一般情况下,运行Android 2.2(升级Froyo)安装了谷歌Play商店应用设备或更新版本将获得在几天内更新。其结果是,你的应用程序可以使用Android版YouTube播放器API和Android生态系统达到最设备。* –

回答

1

使用新的Android版YouTube播放器API - https://developers.google.com/youtube/android/player

API定义加载和播放YouTube视频(和播放列表)和定制和控制视频播放方法经验

因此,对于使用频道,您需要使用常规YoutTube API来获取元数据,并使用Player API播放视频/播放列表。

+0

你能告诉我如何做到这一点,只能遗憾初学者的例子。 – user2407147

+0

我从来没有使用过它,但该文档是相当广泛的。他们甚至有示例应用程序屈指可数,应该是更比足以让你对你的方式:https://developers.google.com/youtube/android/player/sample-applications –

0

请尝试解决此代码工作在布局的XML文件中定义web视图后:

在MainActivity,得到的WebView控件的实例和嵌入YouTube视频的iFrame代码转换为字符串。然后启用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/