【问题标题】:Delphi android intent does not open the right app for video playing or app does not behave properlyDelphi android Intent 没有打开正确的应用程序来播放视频或应用程序运行不正常
【发布时间】: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


【解决方案1】:

intent.settype 在 Delphi XE5 中破坏了 data 属性的内容。 使用像 SetDataAndType 这样的另一个 setter 效果很好。用那个! 不确定他们是在 XE6 还是 XE7 中修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多