android - 如何在 webview 上播放视频

标签 android video youtube android-fullscreen

在露天看台报告应用程序中,他们有一个带有 Youtube 视频的 WebView。当您按下全屏图标时,视频会全屏播放。我怎样才能做到这一点?它是服务器端问题还是 android 问题? 我只想补充一点,即使它是 youtube 视频,您看到的播放器也不是 youtube 播放器,而是另一个播放器。

编辑: youtube是一个组件是url页面。它不是 youtube 网页,所以我不能使用“shouldOveriteUrl”,而且,我不只是在谈论 youtube 视频,我在谈论任何视频组件。我可以在我的服务器上做一些事情,比如用另一个播放器或其他东西包装视频组件吗? 谢谢!

最佳答案

//试试这个将支付 Youtube 视频的示例 Activity

public class MyWebViewClient extends WebViewClient {

public Activity mActivity;

public MyWebViewClient(Activity activity,) {
    super();
    mActivity = activity;
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Uri uri = Uri.parse(url);
    if (uri.getHost().contains("youtube.com")) {
        IntentUtils.viewYoutube(mActivity, url);
        return true;
    }

    return false;
}

public static void viewYoutube(Context context, String url) {
    IntentUtils.viewWithPackageName(context, url, "com.google.android.youtube");
}

public static void viewWithPackageName(Context context, String url, String packageName) {
    try {
        Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        if (isAppInstalled(context, packageName)) {
            viewIntent.setPackage(packageName);
        }
        context.startActivity(viewIntent);
    } catch (Exception e) {
        Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        context.startActivity(viewIntent);
    }
}

public static boolean isAppInstalled(Context context, String packageName) {
    PackageManager packageManager = context.getPackageManager();
    try {
        packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (NameNotFoundException e) {
    }
    return false;
}

@Override
public void onPageFinished(final WebView view, String url) {
    String javascript = "javascript:" +
        "var iframes = document.getElementsByTagName('iframe');" +
        "for (var i = 0, l = iframes.length; i < l; i++) {" +
        "   var iframe = iframes[i]," +
        "   a = document.createElement('a');" +
        "   a.setAttribute('href', iframe.src);" +
        "   d = document.createElement('div');" +
        "   d.style.width = iframe.offsetWidth + 'px';" +
        "   d.style.height = iframe.offsetHeight + 'px';" +
        "   d.style.top = iframe.offsetTop + 'px';" +
        "   d.style.left = iframe.offsetLeft + 'px';" +
        "   d.style.position = 'absolute';" +
        "   d.style.opacity = '0';" +
        "   d.style.filter = 'alpha(opacity=0)';" +
        "   d.style.background = 'black';" +
        "   a.appendChild(d);" +
        "   iframe.offsetParent.appendChild(a);" +
        "}";
    view.loadUrl(javascript);

    super.onPageFinished(view, url);
}

关于android - 如何在 webview 上播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17081719/

相关文章:

java - 连接的热点设备列表

java - 构建/初始化的顺序?

java - 在android studio上读取textview中的html对象

php - 无法在 Safari/Mac (5.0) 上通过 PHP 提供 HTML5 视频

android - YouTube 上的视频上传 - Android

javascript - YouTube 播放器中的黑色边框 - Javascript API

c# - 将 android java 翻译成 xamarin c#

iframe - 如何使用Laravel将 “Video site link”更改为 “Video embed link”

php + 从 html 表单上传图片

jquery - 在 slider 中播放 Vimeo 或 Youtube 视频时停止滑动