Видео YouTube не играет в WebView Андроид

Я пытаюсь играть YouTube видео в WebView, объект WebView показывает первый взгляд на видео с игровой кнопки, но после нажатия на кнопку Играть запустить прогресс-бар и через 2-3 секунды останавливается прогресс-бар и пустой экран с черным цветом.

Изображение1: видео-первый взгляд с кнопку Играть

Рис2: после нажмите на экране кнопку воспроизведения гаснет.

Пожалуйста! помогите мне, почему они не начинаются.

Изображения:1

Изображения:2

Это мой исходный код, чтобы играть адррес youtubevideo в WebView.. пожалуйста, помогите мне ...

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    WebView wv = (WebView) findViewById(R.id.webView1);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.getSettings().setPluginsEnabled(true);
    final String mimeType = "text/html";
    final String encoding = "UTF-8";
    String html = getHTML();
    wv.loadDataWithBaseURL("", html, mimeType, encoding, "");
}

public String getHTML() {
    String html = "<iframe class=\"youtube-player\" style=\"border: 0; width: 100%; height: 95%; padding:0px; margin:0px\" id=\"ytplayer\" type=\"text/html\" src=\"http://www.youtube.com/embed/"
            + "J2fB5XWj6IE"
            + "?fs=0\" frameborder=\"0\">\n"
            + "</iframe>\n";
    return html;
}
Комментарии к вопросу (7)
Решение

Добавить эти строки перед загрузкой содержимого HTML в ваш WebView.

wv.setWebChromeClient(new WebChromeClient() {
});

Из документации:

В целях поддержки встроенного видео HTML5 в вашем приложении, вы должны иметь аппаратное ускорение включено, и установить WebChromeClient. Для полного экрана поддержки, реализации onShowCustomView(вид, WebChromeClient.CustomViewCallback) и onHideCustomView() требуется, getVideoLoadingProgressView() является необязательным.

Комментарии (5)

Следующий код нужен для отображения видео плеер, который запускается в веб-фреймворк. Ключ к Весь поток заключается в том, что видео просмотр передается обратно WebChromeClient и нужно присоединить, что целью вашей иерархии представления.

Я собрал ее с помощью просмотра исходного кода браузера доступна как часть особенности.

Этот код ссылается на 4 представления, которые могут не быть очевидными. Иерархия представления:

  • MContentView так (корень)
  • Объект WebView mWebView (ребенок mContentView)
  • Так mCustomViewContainer (ребенок mContentView)
  • Вид mCustomView (ребенок mCustomViewContainer)

Мнения настраиваются при настройке контейнер активности.







В своей деятельности метод onCreate`:

    mContentView = (FrameLayout) findViewById(R.id.main_content);
    mWebView = (WebView) findViewById(R.id.webView);
    mCustomViewContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);

Зарегистрировать WebChromeClient с mWebView. Что клиент должен переопределить следующие 2 - 4 методов:

void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
{
    // if a view already exists then immediately terminate the new one
    if (mCustomView != null)
    {
        callback.onCustomViewHidden();
        return;
    }

    // Add the custom view to its container.
    mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
    mCustomView = view;
    mCustomViewCallback = callback;

    // hide main browser view
    mContentView.setVisibility(View.GONE);

    // Finally show the custom view container.
    mCustomViewContainer.setVisibility(View.VISIBLE);
    mCustomViewContainer.bringToFront();
}

void onHideCustomView()
{
    if (mCustomView == null)
        return;

    // Hide the custom view.
    mCustomView.setVisibility(View.GONE);
    // Remove the custom view from its container.
    mCustomViewContainer.removeView(mCustomView);
    mCustomView = null;
    mCustomViewContainer.setVisibility(View.GONE);
    mCustomViewCallback.onCustomViewHidden();

    // Show the content view.
    mContentView.setVisibility(View.VISIBLE);
}

public Bitmap getDefaultVideoPoster()
{
    if (mDefaultVideoPoster == null)
    {
        mDefaultVideoPoster = BitmapFactory.decodeResource(getResources(), R.drawable.default_video_poster);
    }
    return mDefaultVideoPoster;
}

public View getVideoLoadingProgressView()
{
    if (mVideoProgressView == null)
    {
        LayoutInflater inflater = LayoutInflater.from(this);
        mVideoProgressView = inflater.inflate(R.layout.video_loading_progress, null);
    }
    return mVideoProgressView;
}

Вы также можете добавить жизненного цикла активности Привязок, таких как:

@Override
protected void onStop()
{
    super.onStop();
    if (mCustomView != null)
    {
        if (mCustomViewCallback != null)
            mCustomViewCallback.onCustomViewHidden();
        mCustomView = null;
    }
}

@Override
public void onBackPressed()
{
    if (mCustomView != null)
    {
        onHideCustomView();
    } else
    {
        finish();
    }
}

В вашей деятельности, чтобы сделать видео скрывать, когда активность прекращается или нажатии кнопки "Назад".

Комментарии (3)

Добавить объект WebView.setWebChromeClient(новый WebChromeClient ()); и включение плагинов для вашего видео добавить

if (Build.VERSION.SDK_INT < 8) {
            webview.getSettings().setPluginsEnabled(true);
        } else {
            webview.getSettings().setPluginState(PluginState.ON);
        }

Благодарим

Комментарии (2)

Есть некоторые проблемы с youtbe видео в потоковом режиме на мобильных устройствах. Если вы напрямую пытаюсь загрузить URL-адрес в веб-представлении и запустите его, затем они выиграли'т играть. Один сложный способ решения этой проблемы является трансляция видео в просмотра видео. Я не пробовал это, но это может быть сделано. <БР>другого способа, чтобы играть видео Youtube, я называю это проще-изменить агента пользователя в настройках веб-просмотра с мобильного устройства на рабочем столе. Агент пользователя указывает тип устройства, на котором видео с YouTube будет работать и, соответственно, что веб-страница отправляется на сервер. Таким образом, видео на YouTube можно послушать и играл. Вот как вы можете сделать это: <БР>

public static final int USER_MOBILE  = 0;
public static final int USER_DESKTOP = 1;
wv.getSettings().setUserAgent(USER_DESKTOP);   // 1 is for the desktop
Комментарии (2)

Я скопировал код аскеры и он работал для меня.... я думаю, U должны установить Flash плательщика.. Ди У?? и ты добавить разрешение в интернет???

кстати, мой код здесь...

package com.example.youtube;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import android.util.Log;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebChromeClient;
import android.webkit.WebViewClient;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsoluteLayout;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
public class MainActivity extends Activity{

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().requestFeature(Window.FEATURE_PROGRESS);

            setContentView(R.layout.activity_main);

final ProgressBar Pbar;

Pbar = (ProgressBar) findViewById(R.id.pB4);
WebView wv = (WebView) findViewById(R.id.webVie1);
//wv.setWebViewClient(new Callback());
WebSettings webSettings = wv.getSettings();
webSettings.setBuiltInZoomControls(true);
webSettings.setJavaScriptEnabled(true);
//wv.setBackgroundColor(0x919191);
final String mimeType = "text/html";
final String encoding = "UTF-8";
String html = getHTML();
wv.loadDataWithBaseURL("", html, mimeType, encoding, "");

final Activity activity = this;

wv.setWebChromeClient(new WebChromeClient() {
       public void onProgressChanged(WebView view, int progress) {
         // Activities and WebViews measure progress with different scales.
         // The progress meter will automatically disappear when we reach 100%

         activity.setProgress(progress * 100);
         {
             if(progress < 100 && Pbar.getVisibility() == ProgressBar.GONE){
                 Pbar.setVisibility(ProgressBar.VISIBLE);

             }
             Pbar.setProgress(progress);
             if(progress == 100) {
                 Pbar.setVisibility(ProgressBar.GONE);

             }
          }
       }
     });
     wv.setWebViewClient(new WebViewClient() {
       public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
         Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_LONG).show();
       }
     });
     wv.setDownloadListener(new DownloadListener()
     {

        public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength)
         {
             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

             startActivity(intent);   
         }

     });

}

    private String getHTML() {
        // TODO Auto-generated method stub
        String html1 = "\n"
                + "\n";
        return html1;
    }

  /*  public void onPause()
    {
        super.onPause();
        System.exit(0);
    }*/

}

файл макета

<?xml version="1.0" encoding="utf-8"?>








 />
Комментарии (0)

мой объект WebView была включена поддержка JavaScript, но удаление сделал видео работы

        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Комментарии (0)

Почему вы хотите играть вы трубка видео в WebView? Вы можете играть в нее с помощью этого намерения

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(stringUrl)));

В противном случае, если вы хотите играть в WebView, перейдите по этой ссылке

https://stackoverflow.com/questions/9565533/android-how-to-play-youtube-video-in-webview?rq=1

Комментарии (0)

Попробуйте этот

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(stringUrl)));
Комментарии (0)