Android 使用意图选择器时,视频会自动恢复

Android 使用意图选择器时,视频会自动恢复,android,video,android-intent,Android,Video,Android Intent,我有一个应用程序,可以使用Intent chooser打开不同的视频。所以,您可以想象用户单击列表项,该列表项包含许多具有视频名称的元素 现在,这件事很顺利 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uriPath, "video/mp4"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但当用户再次单击同一项时,将显示意图选择器。选择设备中的

我有一个应用程序,可以使用Intent chooser打开不同的视频。所以,您可以想象用户单击列表项,该列表项包含许多具有视频名称的元素

现在,这件事很顺利

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uriPath, "video/mp4");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
但当用户再次单击同一项时,将显示意图选择器。选择设备中的任何视频播放器将恢复视频

所以问题是,是否有任何标志或某种方式可以让视频从头开始


这种情况不仅发生在视频中,也发生在pdf中。如果pdf已打开并滚动到最后一页,则再次从我的应用程序中打开pdf将打开最后一页。

此问题已在此处得到回答,特别是在Commonware的此评论中

Even if there were, they would be on a per-app basis.
If you need this level of control over the video playback,
handle the video playback yourself within your own app 
(e.g., VideoView), rather than pass control to third party apps
看到和

当您有意向地委托给另一个应用程序时,您将得到您所得到的。你应该使用视频播放器在你的应用程序中控制它,如果你可能需要一个pdf视图小部件库的话。差不多

从列表视图中选择不同项目时,应播放视频

我试图测试我的应用程序的行为,视频恢复 如果从应用程序再次启动,则从上次播放的帧开始

对我来说,它总是从头开始。我已经在4.2.2上对此进行了测试 和4.4版本

启动视频的代码如下所示:

    Intent in = new Intent(Intent.ACTION_VIEW);
    in.setDataAndType(uripath, "video/*");
    startActivity(in);
 @Override
    public void onStart(){
        super.onStart();
        myVideoView.start();
    }

当您使用意图播放视频时,如何解释和处理意图实际上取决于代理应用程序。除非代理应用程序(处理您正在激发的意图的应用程序)接受额外的参数,以便在从开始开始到继续之间进行选择,否则您真的不能做很多事情


要完全控制,请使用您自己的视频播放器。

使用VideoView解决您的问题

private VideoView myVideoView;
VideoView有一个内置的方法start(),它将从一开始就启动视频,如下所示:

    Intent in = new Intent(Intent.ACTION_VIEW);
    in.setDataAndType(uripath, "video/*");
    startActivity(in);
 @Override
    public void onStart(){
        super.onStart();
        myVideoView.start();
    }
您还可以在onResume方法上使用myVideoView.start()


希望这会有所帮助。:)

我完全不确定这一点。我也同意其他观点,即被调用的应用程序有责任按照其意愿处理意图

但是,一种猜测可能是更改uri:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
    uriPath.buildUpon()
        .appendQueryParameter("t", String.valueOf(System.currentTimeMillis()))
        .build(), 
    "video/mp4"
);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

注意:我没有你提到的问题。视频总是会重新启动。

看起来你在回答一个完全不同的问题。OP希望视频在每次发布时从头开始,而不是继续。OP还提到了
PDF
文件的情况。你认为OP应该编写一个处理所有文件类型查看的应用程序吗?这是一项相当艰巨的任务,你不这么认为吗?相反,Sekto演示了控制视频位置的唯一方法,无论该位置是在中间还是在开始。如果你读了我的答案,没有意向协议通过授权给另一个应用程序来指定视频位置。公平地说,pdf方面只是这个问题的轶事。如果在应用程序中处理每个mime类型是操作系统的设计方式,那么OP就必须这样做。我的回答中的引语不言而喻。谢谢@EricWoodruff,我确实希望我的应用程序从我的应用程序中启动另一个视频播放器(向用户证明是多选的),我通过使用ACTION_VIEW和mime类型成功实现了这一点。关于pdf,这不是一个轶事,而是经过多个pdf阅读器(如adobe reader、moon+、foxit等)的测试和检查。我不想要控制,而只是在第三方播放器发布时实现“从头开始”的灵活性。我很欣赏您的期望,但这不是一个标准的额外查看意图。你试过FLAG_ACTIVITY_CLEAR_TASK吗?是的,我用过,也试过FLAG_ACTIVITY_NEW_TASK。它是在哪个播放器中启动的?我确实使用了相同的代码。它是在我手机上的默认视频播放器“video player”(com.sec.android.app.videoplayer)中启动的。我已经知道这一点,如果videoview是解决方案,我会将其删除,也不会问这个问题。我的问题更倾向于在其他播放器中启动视频,同时从头开始。我也知道surfaceView。我开始写答案,但这或多或少是我计划写的。尝试将额外的参数设置为start position,但正如前面提到的,由应用程序处理意图决定是否执行它想要的操作,并读取或忽略这些参数。