Android帮助:如何在MediaPlayer中打开远程视频文件URL而无需打开浏览器窗口?

14

如何在按钮点击时打开远程视频文件URL以在内部MediaPlayer中播放,而无需打开浏览器窗口?

视频播放正常,但总是首先打开一个浏览器窗口,这很烦人。

这就是我已经在使用的内容,但是否有可能不打开浏览器窗口即可启动mediaplayer。

希望有人能帮忙

谢谢 露西

final Button button = (Button) findViewById(R.id.play);  
     button.setOnClickListener(new Button.OnClickListener() {  
         public void onClick(View v) {  
             // Perform action on click 
             Uri uri = Uri.parse("http://domain.com/videofile.mp4");
             Intent intent = new Intent(Intent.ACTION_VIEW, uri);

             startActivity(intent);

            }

     });  
 }  
4个回答

26

试一下这个:

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.parse(videoPath), "video/mp4");
startActivity(intent);

1
由于某种原因,将setDataAndType()拆分为两行对我来说不起作用: intent.SetData(Uri.parse(videoPath)); intent.SetType("video/mp4"); ...这不是什么大问题,但我想提一下,以防其他人遇到同样的问题。 - jj.

11

尝试将MIME类型添加到Intent中。当前,您正在路由到浏览器,浏览器会执行HTTP HEAD,确定MIME类型,然后将其路由到正确的应用程序。如果自己放入MIME类型,那么就可以跳过浏览器步骤。


谢谢,您能向我展示如何将其编码到上面吗?我不太确定如何做,非常感谢,Lucy。 - lucy
1
@lucy: Intent intent=new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, "..."); 其中 ... 是 MP4 MIME 类型(可能是 video/mp4)。 - CommonsWare
@CommonsWare 我使用了这种方式:Intent intent=new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("https://javmed-prod.s3.amazonaws.com/63351db3788f4393b49d4d701181c7c7.mp4"), "video/mp4"); startActivity(intent);..但是收到了 ActivityNotFound 的错误..我也尝试了 "video/*"...您有什么建议吗? - MKJParekh
@CommonsWare 好的,我从您在SO上的另一篇帖子中得到了答案https://dev59.com/YEnSa4cB1Zd3GeqPNFuf..该链接不支持流媒体..我需要先下载然后播放..谢谢您。 - MKJParekh

5

您需要在意图中设置videoUrl和媒体类型(video/mp4),例如:

String videoUrl = "http://videosite/myvideo.mp4";
Intent playVideo = new Intent(Intent.ACTION_VIEW); 
playVideo.setDataAndType(Uri.parse(videoUrl), "video/mp4");
startActivity(playVideo);

@Brad 像这样播放视频对我来说是有效的。但我有一个情况,我想在HTTP查询中添加额外的标头。 我添加了viewIntent.putExtra(Browser.EXTRA_HEADERS,bundle),但仅在使用setData()而不是setDataAndType()时才添加标头。我的想法是我想播放视频,但为此服务器需要使用http查询中的标头授权我... - Kostadin Georgiev

1
基于这个答案,我建议添加一个活动选择器,可以通过Uri(浏览器)或视频播放器打开视频。以防默认的视频播放器在某些华为设备上不太适合流媒体。
这样用户就可以选择在浏览器中打开它,甚至可以下载它(如果是chrome)。
解决方案应如下所示:
    val uri = Uri.parse("your url")

    val generalViewIntent = Intent(Intent.ACTION_VIEW)
    generalViewIntent.data = uri
    val intentVideo = Intent(Intent.ACTION_VIEW)
    intentVideo.setDataAndType(uri, "video/mp4")

    val chooserIntent = Intent.createChooser(
        intentVideo,
        "Choose application to open video"
    )
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(generalViewIntent))
    try {
        startActivity(chooserIntent)
    } catch (e: Exception) {
        startActivity(generalViewIntent)
    }

首先应用程序将检查它是否可以同时作为视频和url打开,如果没有找到视频,则会抛出异常。如果发生异常,则必须再尝试仅使用浏览器。

根据您的要求,可以添加意图标志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接