当前位置: 首页 > 知识库问答 >
问题:

Android Webview视频播放器

锺离赤岩
2023-03-14

我正在开发一个应用程序,它使用webview来显示网页,如果url是视频链接(youtube)或作为网页一部分的视频,我想播放视频。我试着把url直接添加到webview中,但它连youtube链接都不播放,我已经在webview中启用了插件和javascript.....有谁能在这个问题上帮我,

共有1个答案

桂高昂
2023-03-14

试试看:

public class FlashContentPlayer extends Activity {  
private WebView m_wvMain;  
private Button m_btnPlayVideo;  
private ProgressDialog m_progressLoading;  
private String m_videoUrl;  
private Context m_context;  
@Override
protected void onCreate(Bundle p_savedInstanceState) {
    super.onCreate(p_savedInstanceState);
    setContentView(R.layout.flashcontentplayer);
    m_context = FlashContentPlayer.this;
    m_wvMain = (WebView) findViewById(R.id.fcpwvMain);
    m_btnPlayVideo = (Button) findViewById(R.id.fcpbtnPlayVideo);
    m_wvMain.getSettings().setJavaScriptEnabled(true);
    m_wvMain.getSettings().setAllowFileAccess(true);
    m_wvMain.getSettings().setPluginsEnabled(true);
    m_wvMain.getSettings().setPluginState(WebSettings.PluginState.ON);
    if (getIntent().hasExtra("video_url")) {
        m_videoUrl = getIntent().getExtras().getString(
                AppConstants.VIDEO_URL);
    }
    m_wvMain.setWebViewClient(new VideoWebViewClient());
    m_progressLoading = new ProgressDialog(m_context);
    m_progressLoading.setTitle(getString(R.string.app_name));
    m_progressLoading.setMessage("Loading ...");
    m_btnPlayVideo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View p_v) {
            if (m_videoUrl == null) {
                m_wvMain.loadUrl("http://www.hackerdude.com/channels-test/20051210-w50s.flv");
            } else {
                if (m_videoUrl.contains("www.youtube.com/")
                        || m_videoUrl.contains("youtu.be/")) {
                    System.out.println("video id==>"
                            + getYoutubeVideoId(m_videoUrl));
                    if (isYouTubeInstalled(FlashContentPlayer.this)) {
                        Intent m_intent = new Intent(Intent.ACTION_VIEW,
                                Uri.parse("vnd.youtube:"
                                        + getYoutubeVideoId(m_videoUrl)));
                        startActivity(m_intent);
                    } else {
                        Intent m_yVideoIntent = new Intent(null, Uri
                                .parse("ytv://"
                                        + getYoutubeVideoId(m_videoUrl)),
                                m_context, OpenYouTubePlayerActivity.class);
                        startActivity(m_yVideoIntent);
                    }
                } else {
                    m_wvMain.loadUrl(m_videoUrl);
                }
            }
        }
    });
}
/**
 * Method to get the Video id from the Youtube Url
 * 
 * @param p_url
 *            The url of the YouTube video
 * @return The id of the YouTube video
 */
public String getYoutubeVideoId(String p_url) {
    String m_videoID = null;
    try {
        Pattern m_compiledPattern = Pattern
                .compile(AppConstants.YOUTUBE_URL_PATTERN);
        Matcher m_matcher = m_compiledPattern.matcher(p_url);
        if (m_matcher.find()) {
            int m_start = m_matcher.end();
            m_videoID = p_url.substring(m_start, m_start + 11);
        }
    } catch (Throwable p_e) {
        CustomLogHandler.printErrorlog(p_e);
    }
    return m_videoID;
}
public class VideoWebViewClient extends WebViewClient {
    @Override
    public void onPageStarted(WebView p_view, String p_url, Bitmap p_favicon) {
        m_progressLoading.show();
        super.onPageStarted(p_view, p_url, p_favicon);
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView p_view, String p_url) {
        return super.shouldOverrideUrlLoading(p_view, p_url);
    }
    @Override
    public void onPageFinished(WebView p_view, String p_url) {
        if (m_progressLoading.isShowing()) {
            m_progressLoading.cancel();
        }
        super.onPageFinished(p_view, p_url);
    }
}
/**
 * Method to check if YouTube application is installed or not in the device
 * 
 * @param p_ctx
 *            The context of the activity
 * @return true if YouTube application is installed on the device false
 *         otherwise
 */
public static boolean isYouTubeInstalled(Context p_ctx) {
    PackageManager m_packageManager = p_ctx.getPackageManager();
    boolean m_isInstalled = false;
    List m_appList;
    try {
        // act_list =
        // pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
        m_appList = m_packageManager
                .getInstalledApplications(PackageManager.GET_ACTIVITIES);
        for (int m_i = 0; m_i < m_appList.size(); m_i++) {
            if (m_appList.get(m_i).toString()
                    .contains("com.google.android.youtube")) {
                // System.out.println("In if of com.google.android.youtube");
                m_isInstalled = true;
                break;
            }
        }
        m_packageManager.getPackageInfo("com.google.android.youtube",
                PackageManager.GET_ACTIVITIES);
    } catch (Exception p_e) {
        m_isInstalled = false;
    }
    return m_isInstalled;
}}
 类似资料:
  • 用 AVPlayer 类写的简易视频播放器,可以播放来自互联网的视频,支持手势缩放视频。只能播放iPhone支持的视频格式。 目前有两点不足:一是无法调节音量;二是手势放大缩小之后滑动快进快退也不太正常。希望有其他开发者在此基础上继续改进。 [Code4App.com]

  • 主要内容:HTML视频(Videos)播放,实例,问题以及解决方法,使用 <embed> 标签,实例,使用 <object> 标签,实例,使用 HTML5 <video> 元素,实例,最好的 HTML 解决方法,HTML 5 + <object> + <embed>,使用超链接,实例,关于内联视频的说明,HTML 多媒体标签在 HTML 中播放视频的方法有很多种。 HTML视频(Videos)播放 实例 <video width="320" height="240" controls> <sou

  • 我遵循了一些关于将JavaFX与Swing(JFrame)结合起来播放视频的教程,但是我得到的只是一个黑屏,视频应该没有任何实际的内容播放,也没有错误报告。 我在这里做错了什么,为什么视频不播放? 我尝试了几个. flv视频,没有一个会开始播放(当我在浏览器中打开它们时,它们确实会播放) 我正在运行jre7和jdk1。安装了K-lite完整编解码器包的windows 8.1 N Pro上的7.0_

  • 在 HTML 中播放视频的方法有很多种。 HTML视频(Videos)播放<video width="320" height="240" controls> <source src="movie.mp4" type="video/mp4"> <source src="movie.ogg" type="video/ogg"> <source src="movie.webm" type="video/

  • 在我的应用程序中,我想显示来自服务器URI路径的视频,在这里,第一次播放视频,当我想第二次播放视频时,视频没有播放,并显示一个弹出窗口,如无法播放此视频 下面是我的错误 提前谢谢。

  • 我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。