2010-11-08 108 views
3

为了引导我的问题,请注意几件事。在这种情况下,我不想将所述文件存储在SD卡上。该文件也不能直接存储在应用程序本地文件目录中。它需要位于子目录中,因此它不能使用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的建议:使用Runtime.getRuntime().exec("chmod 755 " + fileName);http://groups.google.com/group/android-developers/browse_thread/thread/4e55d869213483a9/b7270078ac1a2744?lnk=raot,但没有任何区别。他还建议了一个内容提供者,但是如果可以的话,我想避免它,因为将这个文件转换为另一个应用程序看起来很像。

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

谢谢,让我知道如果我不清楚。

+0

其他活动无权访问您的文件。如果你需要他们,你必须将他们保存到SD卡或使用内容提供商。 – Falmarri 2010-11-08 03:41:13

回答

1

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

0

你可能想看看android:sharedUserId清单属性:

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

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

第二点,你确定你能看到PDF文件吗?我认为Android还没有支持它。

+0

我会看看,但我不确定是否要将整个应用打开到另一个应用。有些应用程序可以打开PDF文件,它会在尝试之前检查是否有应用程序。 – cottonBallPaws 2010-11-08 22:18:44

相关问题