我正在使用Delphi XE5为用户创建.avi视频文件的应用程序。成功创建视频后(甚至只是因为用户想再次观看视频),它会尝试使用选择的视频应用程序打开它。我知道 android 为文件类型选择正确的应用程序,或者您可以直接提供文件的 MIME 类型。所以,使用我正在做的德尔福的意图
intent:=TJIntent.Create;
intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('file://'videoFile)));
intent.setType(StringToJString('video/avi'));
当我这样做时,会出现一个非常基本的视频播放器(“设置”的“正在运行的应用程序”部分显示一个名为Android Media的应用程序正在运行),带有播放按钮,但不显示视频。但是,如果您使用任何文件管理器,甚至浏览图库并单击文件,则可以使用“查看视频”应用程序很好地播放该文件。
我无法直接调用查看视频,甚至无法显示视频应用列表供用户选择。我尝试了不同的MIME类型,例如
intent.setType(StringToJString('video/*'));
甚至
intent.setType(StringToJString('*/*'));
这允许用户从其设备中的任何应用程序中进行选择(没有意义,但只是用于测试),因此他可以选择查看视频,但即使这样做,应用程序也只显示一个播放按钮,按下时不显示任何内容。
因此,看起来当从我的应用程序调用时,View Video 无法播放我创建的视频(我没有打开它或类似的东西,选中),但是当从其他应用程序调用时,它可以。
有人知道使用Delphi XE5的意图时的错误或限制吗?或者我做得不对?
Delphi XE5中的< code>intent.settype破坏了数据属性的内容。使用另一个setter,如< code>SetDataAndType,效果很好。用那个!不确定他们是在XE6还是XE7中修复的。