2013-07-15 3 views
5

У меня есть код WebView, с помощью которого я пытаюсь воспроизводить видео на YouTube на канале YouTube. Но все, что он делает, показывает значок spinner на видео и никогда не запускает видео. Кто-нибудь знает, как это исправить?Android - WebView не воспроизводит видео на YouTube

public class YoutubeActivity extends Activity 
{ 
    WebView webview = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     webview = new WebView(this); 
     webview.getSettings().setAppCacheEnabled(false); 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.setInitialScale(1); 
     webview.getSettings().setPluginState(PluginState.ON); 

     webview.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
     }); 


     WebSettings webSettings = webview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setBuiltInZoomControls(true); 
     //webSettings.getMediaPlaybackRequiresUserGesture(); 
     webSettings.setAllowContentAccess(true); 
     webSettings.setEnableSmoothTransition(true); 
     webSettings.setLoadsImagesAutomatically(true); 
     webSettings.setLoadWithOverviewMode(true); 
     webSettings.setSupportZoom(true); 
     webSettings.setUseWideViewPort(true); 

     setContentView(webview); 
     webview.loadUrl("http://www.youtube.com/g33ktalktv");   
    } 

    public void onBackPressed () 
    { 
     //Class.forName("com.***.HTML5WebView").getMethod("onPause", (Class[]) null). 
     //invoke(html5WebView, (Object[]) null); 
     webview.clearView(); 
    } 

    @Override 
    public void onStop() 
    { 
     super.onStop(); 
     // your code 

     webview.clearView(); 
    } 
} 

И это проявляется установка:

<activity 
    android:name="YoutubeActivity" 
    android:label="Some string" 
    android:hardwareAccelerated="true"/> 

Thannk заранее!

ответ

10

Использование WebView для воспроизведения видео на YouTube требует тщательного тестирования и отладки на разные версии ОС Android из-за разницы в функциональности и ошибках между Android 2.x и 4.x.

Менее подверженный ошибкам подход, который дает вам больше контроля, заключается в использовании YouTube Android Player API для встраивания видео YouTube в ваше собственное приложение, у них есть sample app, поэтому вам не должно быть слишком сложно, если вы будете следовать их шагам.

+1

Но проблема с использованием Android-плеера Youtuebe заключается в том, что вам нужно знать идентификатор видео, и приложение youtube должно быть установлено на вашем устройстве. как насчет моей проблемы? http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul

+0

С Android 5 и с WebChromeClient все работает нормально. Но в версиях Android 4 ошибка может быть разной. Здесь я попытался каталогизировать все: http://stackoverflow.com/questions/31591010/youtube-iframe-player-wont-show-videos-in-android-4-x-webview/38410424#38410424 – jos

2

Вы пытались использовать свой собственный WebChromeClient? Этот вопрос кажется актуальным. WebView and HTML5 <video>

Вам необходимо создать один из них и реализовать его самостоятельно, аналогично тому, что вы делаете для WebViewClient.

webview.setWebChromeClient(new WebChromeClient() { 
    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     super.onShowCustomView(view, callback); 
     if (view instanceof FrameLayout) { 
      FrameLayout frame = (FrameLayout) view; 
      if (frame.getFocusedChild() instanceof VideoView) { 
       VideoView video = (VideoView) frame.getFocusedChild(); 
       frame.removeView(video); 
       a.setContentView(video); 
       video.setOnCompletionListener(this); 
       video.setOnErrorListener(this); 
       video.start(); 
      } 
     } 
    } 
}); 

Убедитесь, что вы добавить webview.getSettings().setPluginsEnabled(true); своим WebView настройки.

И самое главное, для любой веб-страницы, чтобы загрузить в WebView, обязательно иметь INTERNET разрешение в манифесте:

<uses-permission android:name="android.permission.INTERNET"/> 
+11

не могли бы вы объяснить эту строку - a.setContentView (видео); – SJSSoft

0

Использование

<application 
     android:hardwareAccelerated="true" 
     android:allowBackup="true"> 
</application> 

Прекрасно работает.

Смежные вопросы