2013-06-12 4 views
25

Я использую WebView для отображения встроенного видео Youtube и работает на Galaxcy S2 (OS 2.3.5) и не на Nexus S (OS 2.3.4), все, что я получаю белый экран без отображения видео.Вставить видео Youtube в приложение для Android

Вот фрагмент кода, я использую и заявления в файле манифеста:

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

Примечание: параметр «selected_video» является хэш видео (VideoID).

Заявления в файле манифеста:

<?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" > 

    . 
    . 

Пожалуйста, дайте мне знать, если вы распознающего все, что я должен изменить в своем коде, или помочь с полным кодом, который может поддерживать все Android устройств и ОС для отображения встроенного (In-App) видео Youtube с высоким качеством.

ОБНОВЛЕНИЕ: Обратите внимание, решение, которое я ищу, должно отображать видео высокого разрешения. Я работал над различными устройствами и ОС с помощью класса VideoView, но качество видео недостаточно. Поэтому любое решение, включая VideoView или WebView или любым другим способом, будет приниматься только в том случае, если оно будет отображать видео высокого качества YouTube. Спасибо всем ответчикам!

+0

Я не уверен, но это может быть флэш Prob, Flash установлен в Nexus S ??? http://stackoverflow.com/questions/5791035/what-does-install-flash-plugin-in-webview-mean – idan

+0

Я мог бы использовать другие приложения, которые делают то же самое на моем Nexus S. Я не хочу, чтобы вспышка была необходимо использовать приложение ... – Idan

+0

Я имею в виду, я думаю, что это не работает, потому что Youtube требует Flash, пожалуйста, проверьте, могут ли устройства просматривать сайт YouTube и смотреть фильмы? и дайте мне знать результат (не пытайтесь использовать приложение YouTube только на сайте YouTube). maby ather app use, youtube android player? https://developers.google.com/youtube/android/player/ – idan

ответ

2

Это работает так:

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

Этот код не компилируется (метрики должны быть метриками). Что должно быть на «вашем url» точно? можете ли вы предоставить лучший пример? – Idan

33

есть официальный YouTube Android Player API которым вы можете использовать. Это немного сложнее, но работает лучше, чем другие решения с помощью веб-клиентов.

Сначала вы должны зарегистрировать свое приложение в Googles API Console. Это абсолютно бесплатно, пока ваше приложение не получит более 25 000 запросов в месяц (или что-то в этом роде). По ссылке есть полные и большие учебные пособия. Надеюсь, вы сможете понять их. Если нет, спросите! :)

+0

Спасибо! Как глупо со мной я не мог найти API для youtube. Lol –

+2

Youtube android player api требует, чтобы приложение YouTube было установлено и служба игры google, но вставляйте видео Youtube для запуска на каждом устройстве – vuhung3990

4

хотя я предлагаю использовать youtube api или вызвать новое намерение и заставить систему обрабатывать его (то есть приложение YouTube), вот какой-то код, который может вам помочь, он имеет вызов скрытого метода, потому что вы не можете пауза и возобновление webview

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

Используйте это Youtube Embed API из Google.

+0

Насколько я понимаю, у меня должно быть приложение Youtube на устройстве. Это не то, что я хочу. – Idan

+0

Не можете использовать https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerView YouTubePlayerView, чтобы вставить видео прямо в ваше приложение. Это должно быть конкретное действие, но метод, используемый для запуска YouTubePlayerView, не включает в себя намерение и, следовательно, не может запускать приложение YouTube. –

+0

Я думаю, что API просто использует часть кода файлов библиотеки, поставляемую с приложением YouTube. Таким образом, любой пользователь вашего приложения должен будет иметь приложение YouTube на своем телефоне. Ваше приложение может запросить, установлено ли оно и иным образом направляет пользователя на его установку. –

0

Качество видео зависит от скорости подключения с использованием API

в качестве альтернативы для других, чем API означает, что без приложения YouTube вы можете следить за этим link

1

Встраивание проигрывателя YouTube в Android очень просто & это вряд ли отнимет у вас 10 минут,

1) Enable YouTube API from Google API console 
2) Download YouTube player Jar file 
3) Start using it in Your app 

Вот подробные шаги http://www.feelzdroid.com/2017/01/embed-youtube-video-player-android-app-example.html.

Просто смотрите его &, если вы сталкиваетесь с какой-либо проблемы, дайте мне знать, плохо помочь вам

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