【发布时间】:2015-01-29 13:16:38
【问题描述】:
我将 Delphi XE5 用于为用户创建 .avi 视频文件的应用程序。 在成功创建它后(或者甚至只是因为用户想再次观看视频),它会尝试使用视频选择的应用程序打开它。 我知道 android 会为文件类型选择正确的应用程序,或者您可以指导它提供文件的 MIME 类型。 所以,我正在使用 Delphi 的意图
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 running 的应用程序),带有一个播放按钮,但不显示视频。 但是,如果您使用任何文件管理器,甚至浏览图库并单击文件,它可以使用 View Video 应用程序很好地播放。
我无法让我的应用直接调用 View Video,甚至无法显示视频应用列表供用户选择。 我尝试了不同的 MIME 类型,例如
intent.setType(StringToJString('video/*'));
甚至
intent.setType(StringToJString('*/*'));
这让用户可以从其设备中的任何应用程序中进行选择(废话,但只是为了测试),这样他就可以选择查看视频,但即使这样做,应用程序也只显示一个播放按钮,按下时不显示任何内容。
因此,当从我的应用程序调用时,View Video 似乎无法播放我创建的视频(我没有打开它或类似的东西,检查)但是当从其他应用程序调用时它可以。
在使用 Delphi XE5 的意图时,是否有人知道错误或限制,或者我做的不对?
【问题讨论】:
-
如果我在你的位置,我会检查你作为文件位置传递给 setData 的字符串。现在我没有直接为 android 制作应用程序的经验,但基于应用程序打开但其中没有内容的事实,我怀疑错误(无效)文件位置传递给它。或者可能是您的意图调用顺序错误。在设置 Action 之前设置文件位置和文件类型不是更好吗?如果设置操作是启动应用程序的原因,那么其中没有内容也就不足为奇了,因为那时它仍然没有提供给意图对象。
-
SilverWarrior 你的评论让我走上了正确的道路!检查 Data 属性,我发现 SetType 完全破坏了它的内容!我猜这是一个讨厌的 XE5 错误。我能够使用另一个运行良好的设置器并且它运行良好:数据和类型均已正确设置,并且在选择视频应用程序后,视频播放正常。至于最后一个建议不是 Setaction 触发意图,有一个明确的 StartActivity 方法,我没有包括在内。但毕竟检查数据内容是显而易见的事情,直到你也告诉我我才看到它。非常感谢!
-
很高兴能帮上忙。不幸的是,我没有任何能够测试该错误是否在较新版本的 Delphi 中得到解决的 android 设备。但我认为,如果有人已经发布过关于这个错误的问题,如果你可以去检查 embarcadero 质量中心,如果没有其他人发布过,那么我认为这也不错。可能发生的更糟糕的事情是,您得到的答案是“这已在 X 版本中得到修复”。
标签: android delphi android-intent video