2013-06-12 21 views
25

Utilizzo una visualizzazione Web per la visualizzazione di video Youtube incorporato e funziona su Galaxcy S2 (OS 2.3.5) e non su Nexus S (OS 2.3.4), tutto ciò che ottengo è una schermata bianca senza alcun display video.Incorpora video di YouTube all'interno di un'app per Android

Ecco il frammento di codice che sto utilizzando e le dichiarazioni nel file manifesto:

private WebView wv; 

private void setWebView() 
{ 
wv = (WebView) findViewById(R.id.webView); 

wv.setWebChromeClient(new WebChromeClient()); 

wv.getSettings().setPluginState(WebSettings.PluginState.ON); 

wv.setWebViewClient(new WebViewClient()); 

wv.getSettings(); 

wv.setBackgroundColor(0x00000000); 

wv.setKeepScreenOn(true); 

wv.setHorizontalScrollBarEnabled(false); 
wv.setVerticalScrollBarEnabled(false); 

wv.getSettings().setBuiltInZoomControls(true); 

final String mimeType = "text/html"; 
final String encoding = "UTF-8"; 
String html = getHTML(); 

wv.loadDataWithBaseURL("", html, mimeType, encoding, ""); 

} 


public String getHTML() 
{ 

String html = "<html>" 

    + "<head>" 
+ "</head>" 
+ "<body style=\"border: 0; padding: 0\">" 
+ "<iframe " 
+ "type=\"text/html\" " 
+ "class=\"youtube-player\" " 
+ "width= 100%\"" 
+ "\" " 
+ "height= 95%\"" 
+ "\" " 
+ "src=\"http://www.youtube.com/v/" 
+ selected_video 
    + "?controls=0&showinfo=0&showsearch=0&modestbranding=0" + 
"&autoplay=1&fs=1&vq=hd720\" " + "frameborder=\"0\"></iframe>" 
    + "</body>" 
    + "</html>"; 

return html; 
} 

Nota: il parametro "selected_video" è l'hash del video (ID video).

Le dichiarazioni nel file manifesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android=http://schemas.android.com/apk/res/android 
. 
. 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

<application 
    . 
    . 
    android:hardwareAccelerated="true" > 

    . 
    . 

per favore fatemelo sapere in caso di riconoscimento di qualcosa che dovrei cambiare nel mio codice, o aiutare con un codice completo che può supportare tutti i dispositivi Android e OS per la visualizzazione incorporata (In-App) Video Youtube con alta qualità.

UPDATE: Prestare attenzione, la soluzione che sto cercando dovrebbe visualizzare video ad alta risoluzione. Ho capito che funziona sui diversi dispositivi e sistemi operativi usando la classe VideoView ma la qualità del video non è abbastanza buona. Quindi qualsiasi soluzione che includa VideoView o WebView o in qualsiasi altro modo sarà accettata solo se renderà possibile visualizzare video YouTube di alta qualità. Grazie a tutti i soccorritori!

+0

Non sono sicuro, ma potrebbe essere prob Flash, Flash è installato in Nexus S ??? http://stackoverflow.com/questions/5791035/what-does-install-flash-plugin-in-webview-mean – idan

+0

Potrei usare altre app che fanno lo stesso sul mio Nexus S. Non voglio che il flash sia un must per usare l'app ... – Idan

+0

Voglio dire, penso che non funzioni perché Youtube richiede Flash, controlla se i dispositivi possono navigare nel sito di YouTube e guardare film? e fammi sapere il risultato (non provi l'app YouTube solo sul sito di youtube) maby ather l'app, youtube player android? https://developers.google.com/youtube/android/player/ – idan

risposta

2

funziona così:

String item = "http://www.youtube.com/embed/"; 

String ss = "your url"; 
ss = ss.substring(ss.indexOf("v=") + 2); 
item += ss; 
DisplayMetrics metrics = getResources().getDisplayMetrics(); 
int w1 = (int) (metrics.widthPixels/metrics.density), h1 = w1 * 3/5; 
wv.getSettings().setJavaScriptEnabled(true); 
wv.setWebChromeClient(chromeClient); 
wv.getSettings().setPluginsEnabled(true); 

try { 
    wv.loadData(
    "<html><body><iframe class=\"youtube-player\" type=\"text/html5\" width=\"" 
    + (w1 - 20) 
    + "\" height=\"" 
    + h1 
    + "\" src=\"" 
    + item 
    + "\" frameborder=\"0\"\"allowfullscreen\"></iframe></body></html>", 
          "text/html5", "utf-8"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

private WebChromeClient chromeClient = 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); 
       video.start(); 
      } 
     } 

    } 
}; 
+0

Questo codice non viene compilato (le metriche devono essere metriche). Cosa dovrebbe essere sul "tuo URL" esattamente? puoi fornire un esempio migliore? – Idan

33

c'è un YouTube Android Player API wich ufficiale è possibile utilizzare. Questo è un po 'più complicato, ma funziona meglio di altre soluzioni che utilizzano webclients.

Per prima cosa devi registrare la tua app in Googles API Console. Questo è completamente gratuito fino a quando la tua app non richiederà più di 25k al mese (o qualcosa del genere). Ci sono completi e fantastici tutorial sotto il link. Spero che tu possa capirli. Altrimenti, chiedi! :)

+0

Grazie! Che sciocco da parte mia non sono riuscito a trovare l'API per YouTube. Lol –

+2

Youtube player Android api richiede l'app youtube installata e il servizio di riproduzione google, ma Incorpora video Youtube per l'esecuzione su ogni dispositivo – vuhung3990

4

sebbene io suggerisca di usare youtube api o chiamare il nuovo intento e far sì che il sistema lo gestisca (app youtube), qui un codice che può aiutarti, ha una chiamata a un metodo nascosto perché non puoi interrompere e riprendere la visualizzazione Web

import java.lang.reflect.Method; 

import android.annotation.SuppressLint; 
import android.os.Bundle; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 

import android.app.Activity; 

@SuppressLint("SetJavaScriptEnabled") 
public class MultimediaPlayer extends Activity 
{ 
    private WebView mWebView; 
    private boolean mIsPaused = false; 

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

     String media_url = VIDEO_URL; 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.setWebChromeClient(new WebChromeClient()); 

     WebSettings ws = mWebView.getSettings(); 
     ws.setBuiltInZoomControls(true); 
     ws.setJavaScriptEnabled(true); 

     mIsPaused = true; 
     resumeBrowser(); 
     mWebView.loadUrl(media_url); 
    } 

    @Override 
    protected void onPause() 
    { 
     pauseBrowser(); 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() 
    { 
     resumeBrowser(); 
     super.onResume(); 
    } 

    private void pauseBrowser() 
    { 
     if (!mIsPaused) 
     { 
      // pause flash and javascript etc 
      callHiddenWebViewMethod(mWebView, "onPause"); 
      mWebView.pauseTimers(); 
      mIsPaused = true; 
     } 
    } 

    private void resumeBrowser() 
    { 
     if (mIsPaused) 
     { 
      // resume flash and javascript etc 
      callHiddenWebViewMethod(mWebView, "onResume"); 
      mWebView.resumeTimers(); 
      mIsPaused = false; 
     } 
    } 

    private void callHiddenWebViewMethod(final WebView wv, final String name) 
    { 
     try 
     { 
      final Method method = WebView.class.getMethod(name); 
      method.invoke(mWebView); 
     } catch (final Exception e) 
     {} 
    } 
} 
-1

Utilizzare questo Youtube Embed API da google.

+0

A mio avviso per utilizzare che devo avere l'app Youtube sul dispositivo, non è quello che voglio. – Idan

+0

Non puoi utilizzare https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerView YouTubePlayerView per inserire il video direttamente nella tua app. Deve essere un'attività specifica, ma il metodo utilizzato per avviare YouTube PlayerView non include un intento e pertanto non può avviare l'applicazione YouTube. –

+0

Penso che l'API usi semplicemente la parte di codice dei file di libreria forniti con l'applicazione YouTube. Pertanto, qualsiasi utente della tua app dovrà avere l'app YouTube sul proprio telefono. La tua app potrebbe interrogare per vedere se è installata e in caso contrario guida l'utente a installarla. –

0

La qualità video dipende dalla velocità di connessione utilizzando API

alternativa per diverso API significa senza YouTube applicazione è possibile seguire questa link

Problemi correlati