【问题标题】:How to open a local app file in another app via an intent?如何通过意图在另一个应用程序中打开本地应用程序文件?
【发布时间】:2010-11-08 01:10:51
【问题描述】:

作为我的问题的序言,有几点需要注意。在这种情况下,我不想将所述文件存储在 sdcard 上。该文件也不能直接存储在应用程序本地文件目录中。它需要在子目录中,因此无法使用 openFileOutput() 和 MODE_WORLD_READABLE 写入文件。

该应用程序可能会下载文件小文件(如 pdf)并将它们存储在本地的子目录中。如果用户有可以打开这些文件的应用,我希望他们能够打开这些文件。

例如,这里是发送 pdf 的意图:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(path), "application/pdf");
startActivity(intent);

路径类似于:/data/data/packagename/files/subdir/example.pdf

该意图将打开一个 pdf 查看器,但查看器无法打开该文件。我认为这是一个权限问题。我在这里尝试了 Mark Murphy 的建议:http://groups.google.com/group/android-developers/browse_thread/thread/4e55d869213483a9/b7270078ac1a2744?lnk=raot of using Runtime.getRuntime().exec("chmod 755 " + fileName);,但没有任何区别。他还建议了一个内容提供程序,但如果可以的话,我想避免它,因为将这个文件转移到另一个应用程序似乎很多。

如果内容提供者是唯一的选择,我是否必须将文件保存到内容提供者,或者我是否可以在需要时仅使用内容提供者将其传递给其他应用程序?

谢谢,如果我不清楚,请告诉我。

【问题讨论】:

  • 其他活动无权访问您的文件。如果需要,您必须将它们保存到 SD 卡或使用内容提供商。

标签: android file permissions android-intent local


【解决方案1】:

我还尝试了您提到的所有选项(以及更多选项),内容提供商是唯一对我有用的方法。我不确定您所说的“将文件保存到内容提供商”是什么意思,但实际上您不需要数据库中的任何内容来让提供商将文件提供给其他应用程序。

【讨论】:

    【解决方案2】:

    您可能想查看 android:sharedUserId 清单属性:

    将与其他用户共享的 Linux 用户 ID 的名称 应用程序。默认情况下,Android 为每个应用程序分配自己的 唯一的用户 ID。但是,如果此属性设置为相同的值 对于两个或多个应用程序,它们都将共享相同的 ID — 前提是它们也由相同的证书签名。 具有相同用户 ID 的应用程序可以访问彼此的数据,如果 需要,在同一进程中运行。

    请注意,您的应用程序已经有一个您无法确定的默认应用程序 (AFAIK)。最好为两个应用定义相同的 sharedUserId,然后将它们安装在新的模拟器上。

    第二点,您确定可以查看 PDF 文件吗?我还以为安卓还不支持呢。

    【讨论】:

    • 我会看看那个,但我不确定是否要将整个应用程序打开到另一个应用程序。有一些应用程序可以打开 PDF,它会在尝试之前检查是否有一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多