如何通过意图在另一个应用程序中打开本地应用程序文件?

时间:2010-11-08 01:10:51

标签: android file permissions android-intent local

要提出我的问题,请注意事项。在这种情况下,我不想将所述文件存储在SD卡上。该文件也不能直接存储在apps本地文件目录中。它需要位于子目录中,因此无法使用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使用Runtime.getRuntime().exec("chmod 755 " + fileName);,但它没有任何区别。他还建议了一个内容提供商,但如果可以的话我想避免使用它,因为将此文件转移到另一个应用程序似乎很多。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  

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

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

作为第二点,您确定能够查看PDF文件吗?我认为在Android中没有支持它。