2013-07-15 31 views
5

YouTube videolarını bir YouTube kanalında oynatmaya çalıştığım bir WebView kodum var. Ancak tüm yaptığı şey, bir videoda spinner simgesini göstermektir ve aslında videoyu hiç başlatmaz. Bunu nasıl düzelteceğini bilen var mı?Android - WebView YouTube videolarını oynatamıyor

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(); 
    } 
} 

Ve bu apaçık bir ayardır: önceden

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

Thannk!

cevap

10

kapsamlı test ve üzerinde ayıklama gerektirecektir Android 2.x ve 4.x arasında fonksiyonellik ve hata farkı nedeniyle farklı Android işletim sistemi sürümleri.

Size daha fazla denetim olanağı sağlayan daha az hata eğilimli bir yaklaşım, bir YouTube videosunu kendi uygulamanıza gömmek için YouTube Android Player API kullanmaktır; bu nedenle, sample app, adımlarını izlerseniz çok zor olmamalıdır.

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

+1

Ancak Youtuebe Android player'ı kullanmanın problemi, video kimliğini bilmeniz ve youtube uygulamasının cihazınızda yüklü olması gerektiğidir. Sorunum ne olacak? http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul

+0

Android 5'den ve WebChromeClient ile her şey iyi çalışıyor. Ancak Android 4 sürümlerinde, hata farklı olabilir. Burada tüm kataloğu denedim: http://stackoverflow.com/questions/31591010/youtube-iframe-player-wont-show-videos-in-android-4-x-webview/38410424#38410424 – jos

2

Kendi WebChromeClient'i kullanmayı denediniz mi? Bu soru önemli görünüyor. WebView and HTML5 <video>

Bunlardan birini oluşturmanız ve WebViewClient için yaptığınız işe benzer şekilde kendiniz uygulamanız gerekir.

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(); 
      } 
     } 
    } 
}); 

Eğer Webview ayarlarına webview.getSettings().setPluginsEnabled(true); eklemek emin olun.

Ve en önemlisi, bir WebView yüklemek için herhangi web sayfası için, senin Manifestosunun INTERNET iznine sahip emin olun: YouTube videolarını oynatmak için WebView'ı kullanma

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

bu satırı açıklayabilir misiniz? – SJSSoft

0

Kullanım Mükemmel çalışma.