与第三方活动共享文件或内容

时间:2014-01-24 21:23:07

标签: android android-intent android-activity android-gallery android-permissions

我有一个简单的问题,但似乎无法在网上找到答案。

我有一个活动A,它从互联网上下载文件并将它们放到getApplicationContext()获取的本地文件夹中.getFilesDir()。getPath()指向:" /data/data/com.myapp .android /文件"

现在,当用户选择要显示其内容的文件时,我会执行以下操作:

File file = new File(filePath);
Uri uri = Uri.fromFile(file);

MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getMimeTypeFromExtension(fileExtension);

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(uri, type);

Intent intentChooser = Intent.createChooser(intent, "Open File");
startActivity(intentChooser);

当执行此操作时,将向用户显示“打开文件”对话框,然后选择“" Gallery"画廊活动似乎没有任何内容。

查看logcat,我看到以下内容:

E/PanoMetadata(17732): Could not read file: /data/data/com.myapp.android/files/downloads/Splash.png
E/PanoMetadata(17732): java.io.FileNotFoundException: /data/data/com.myapp.android/files/downloads/Splash.png: open failed: EACCES (Permission denied)
E/PanoMetadata(17732):  at libcore.io.IoBridge.open(IoBridge.java:409)
E/PanoMetadata(17732):  at java.io.FileInputStream.<init>(FileInputStream.java:78)

注意&#34;打开失败:EACCES(权限被拒绝)&#34;

但文件确实存在,我可以使用我的活动A显示它而没有问题。

问题似乎是开始使用ACTION_VIEW(在本例中为Gallery)的其他活动似乎在不同的进程/用户下运行,因此它没有对我的文件的读访问权。

我的3个问题是:

  1. 是否可以让ACTION_VIEW活动在我的流程和用户上下文(活动A)中运行?

  2. 如何在活动之间共享文件? (我不喜欢在/ sdcard / ...下复制文件,但如果这是唯一的选项而不是必须的。)

  3. 有没有办法将文件内容(不是文件指针)从我的活动传递到图库活动或其他活动?

  4. 问候!

2 个答案:

答案 0 :(得分:1)

  

是否可以让ACTION_VIEW活动在我的流程和用户上下文(活动A)中运行?

不,出于安全原因,您也不希望这样做。

  

如何在活动之间共享文件?

据我所知,这个问题与你的下一个问题相同。

  

有没有办法将文件内容(不是文件指针)从我的活动传递到Gallery活动或其他活动?

最佳解决方案是使用ContentProvider。最简单的解决方案是use FileProvider,您可以将其添加到清单中并配置为提供文件,而无需创建子类。另见:http://developer.android.com/training/secure-file-sharing/index.html

答案 1 :(得分:0)

应用无法访问其他应用的私人数据。这样,“Gallery”无法访问“data / data / com.myapp.android / files”。您需要将共享文件目录放在外部存储器中。