使用意图启动另一个应用程序以打开 .vtk 文件

Using Intents to Launch another app to open a .vtk file

我目前正在 Android 开发一个应用程序,在我的应用程序中,用户可以浏览和 select .vtk 文件。

我还安装了一个名为 "KiwiViewer," 的应用程序,它可以打开这些 .vtk 文件。当我手动浏览平板电脑并使用文件管理应用程序单击 .vtk 文件时,KiwiViewer 可以毫无问题地打开这些 .vtk 文件。

我希望在我的应用程序中发生同样的事情。我希望 KiwiViewer 打开用户的 selected .vtk 文件。我知道 KiwiViewer 的程序包 ("com.kitware.KiwiViewer"),并且我能够有意地打开该应用程序。但是,我无法打开传递给应用程序的 .vtk 文件。

Intent i = new Intent(this.getPackageManager().getLaunchIntentForPackage("com.kitware.KiwiViewer"));
i.setData(Uri.parse(getIntent().getExtras().getString("ImageURI")));
startActivity(i);

我已经检查过了,发送的数据是有效的(不是空的,肯定是正确的文件。

我也试过以下方法,但也不管用:

Intent i = new Intent();
i.setData(Uri.parse(getIntent().getExtras().getString("ImageURI")));
i.setPackage("com.kitware.KiwiViewer");
startActivity(i);

但是,我得到了 "Activity Not Found Exception."

如何启动 KiwiViewer 以打开我提供的数据?

编辑: 当我查看提供给 KiwiViewer 的 URI 路径时,它似乎是 /document/primary:ExperimentData/MHDImage.vtk。 KiwiViewer 说这不存在。实际上,路径是/sdcard/ExperimentData/MHDImage.vtk。两者有什么不同的原因吗?

事实证明,在查看 KiwiViewer 的源代码后,它需要一个文件而非内容的 URI 方案来打开数据。此外,我不得不手动提取子目录 ("ExperimentData/MHDImage.vtk") 并将其连接到“/sdcard/”以使 KiwiViewer 打开数据。我知道这种硬编码不受欢迎,但是当我使用替代“/sdcard/”(Environment.getExternalStorageDirectory().getPath())时,我没有得到正确的目录。