【问题标题】:How to open the default app on a mobile device based on the file extension?如何根据文件扩展名在移动设备上打开默认应用程序?
【发布时间】:2021-07-22 17:06:39
【问题描述】:

我们正在 Firemonkey 中编写一个跨平台的应用程序。 其中一项功能是用户可以下载存储在服务器上的文件。 因此,我们有一个应用程序用来下载文件的 REST 服务。

我们不知道文件类型,它可能是 pdf、图像或 word 文档,... 我正在寻找一个允许在能够打开文档的移动设备上启动标准应用程序的例程,并且适用于 IOS 和 Android。

有人可以帮我吗?

谢谢,

多米尼克

【问题讨论】:

  • "我们不知道文件类型" - REST 服务器是否没有报告它正在发送的文件类型?
  • 嗨 Remy,是的,REST 服务器也返回文件名,所以我们知道文件类型,但它可以是任何类型的文件。我正在寻找某种例程,允许 IOS 或 Android 决定哪个是最适合使用的应用程序,例如打开方式,它提供了可用应用程序的选择来查看文件。对于 Android,似乎有很多关于此的答案,但对于 IOS 显然没有。
  • 没有Content-Type 与文件名一起发送?或者,Content-Type 只是一个通用类型,比如application/octet-stream?我不了解 iOS,但 Android 确实有办法让 Intent 请求显示应用程序选择器对话框,但您必须提供文件名+类型,以便对话框可以过滤掉不支持的应用程序处理文件。
  • 这些文件来自一个用 Unigui 编写的 Delphi 应用程序。用户从他们的 pc 上传后台应用程序中的文件。这可以是 pdf、word、图像。我们只将扩展名作为参考。

标签: android ios delphi firemonkey


【解决方案1】:

这个问题已经被问过很多次了,但它在 Android 上的基本情况是这样的:

var
  Data: Jnet_Uri;
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Data := TJnet_Uri.JavaClass.parse(StringToJString('file://sdcard/test.jpg'));
  Intent.setDataAndType(Data, StringToJString('image/*'));
  SharedActivity.startActivity(Intent);
end;

您必须根据遇到的每种文件类型的文件扩展名调整SetDataAndType。这将在一个长的“类似案例”的结构中。

我不知道如何在 iOS 上做同样的事情。

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多