2013-07-15 15 views
5

Mam kod WebView, za pomocą którego próbuję odtwarzać filmy z YouTube na kanale YouTube. Ale wszystko, co robi, to pokazywanie ikony spinnera na filmie i nigdy nie rozpoczynanie filmu. Czy ktoś wie, jak to naprawić?Android - WebView nie odtwarza filmów z 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(); 
    } 
} 

I jest to manifest ustawienie:

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

Thannk z góry!

Odpowiedz

10

Korzystanie WebView, aby odtwarzać filmy z YouTube wymaga dogłębnego testowania i debugowania na różne wersje systemu operacyjnego Android ze względu na różnice w funkcjonalności i błędach między Androidem 2.x a 4.x.

Mniejsza podatność na błędy, która zapewnia większą kontrolę, polega na użyciu YouTube Android Player API do osadzenia filmu z YouTube w swojej własnej aplikacji, mają one sample app, więc nie powinno to być zbyt trudne, jeśli wykonasz odpowiednie kroki.

+1

Ale problem z używaniem odtwarzacza Youtuebe dla systemu Android polega na tym, że musisz znać identyfikator wideo, a aplikacja youtube musi być zainstalowana w twoim urządzeniu. co z moim problemem? http://stackoverflow.com/questions/18533678/playing-youtube-videos-smooth-in-web-view – anshul

+0

Z Androidem 5 iz WebChromeClient wszystko działa dobrze. Ale w wersjach Androida 4 błąd może być inny. Tutaj próbowałem skatalogować wszystkie: http://stackoverflow.com/questions/31591010/youtube-frame-player-wont-show-videos-in-android-4-x-webview/38410424#38410424 – jos

2

Czy próbowałeś już korzystać z własnego ? To pytanie wydaje się istotne. WebView and HTML5 <video>

Musisz utworzyć jeden z nich i zaimplementować go samodzielnie, podobnie do tego, co robisz dla 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(); 
      } 
     } 
    } 
}); 

Należy dodać webview.getSettings().setPluginsEnabled(true); do ustawień widoku WWW.

A co najważniejsze, dla dowolny stronę, aby załadować w WebView, należy mieć pozwolenie INTERNET w swoim manifeście:

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

proszę wyjaśnić tę linię: a.setContentView (wideo); – SJSSoft

0

Zastosowanie

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

działa idealnie.

Powiązane problemy