问题标签 [android-fileprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6769 浏览

android - 使用 FileProvider 从内部存储共享图像

我有一些文件存储在我的应用程序的内部存储中,我想在外部应用程序中打开这些文件(例如,将图像发送到图库以供查看。)我已经设置了一个FileProvider这样做的。

来自AndroidManifest.xml

来自res/xml/files.xml

Fragment我尝试打开文件的位置:

从 logcat 输出(共享到 Gallery 应用程序):

发生的事情是找到了文件,生成了一个 URI,并且正确检测了 mimetype;我从 Android 获得了准确的处理程序列表,当我选择“画廊”时,画廊活动被启动,但它直接进入设备自己的画廊——没有错误消息,也没有打开的图像。这种行为似乎与其他图像查看器一致 - 例如 G+ 照片。

真正奇怪的是,如果我使用声明的 Intent ACTION_SEND 执行相同的代码,该文件会正确附加到 Gmail 中的电子邮件。(事实上​​,这就是我对应用程序的内部日志所做的事情。)所以我似乎不太可能错误地格式化内容 URI。我最好的猜测是我使用了错误的 Intent 操作?但我不知道有什么比 ACTION_VIEW 更好。

有任何想法吗?

0 投票
1 回答
1197 浏览

android - 文件提供程序 - 即使在自己的应用程序中也无法访问文件

我正在实现一个File Provider,仔细遵循文档但无法使用应用程序本身的文件或共享任何文件。

添加清单,为目录共享创建 xml 文件,生成内容 uri,授予 uri 权限,尝试与缓存、外部、内部目录共享文件,但没有任何效果。

搜索了网络,但没有发现代码中缺少任何内容。

下面是代码:

显现:

文件路径.xml

GetUri:

访问pdf文件的代码:

访问图像的代码:

请帮助我找出哪里出错了,甚至无法在我自己的应用程序中使用这些文件。

提前致谢。

0 投票
1 回答
5670 浏览

java - 使用 FileProvider 共享 Android 照片

我已经阅读了关于这个论点的所有答案,但我总是收到接收我照片的应用程序的错误。 对于所有应用程序
, 唯一对我有用的方法是(它之所以有效,是因为sd 卡文件对所有应用程序都是公开的):



现在,我不知道如何共享位于私人文件夹中的文件。我使用了谷歌文档提供的代码:


这是使用共享文件的代码,FileProvider但不能与任何应用程序一起使用,除了whats up:

为什么我在其他应用程序中不断收到错误,例如:
java.lang.SecurityException: Permission Denial: content://com.test.myapp.fileprovider/internal_cache/exported.jpg (pid=675, uid=10052) requires null
或者
IllegalArgumentException: Failed to find configuration root that contains content://com.test.myapp.fileprovider/internal_cache/exported.jpg

0 投票
2 回答
1321 浏览

java - 使用 Android FileProvider 删除文件时出现 NullPointerException

我在使用 Android File API 时遇到问题。

这是我想要实现的目标,我正在从亚马逊下载视频,这些视频应该在完全下载后保存在本地。我以非常直接的方式执行此操作(代码已缩短,我只显示基本行):

其中inputStreamfileOutputStream是实例变量。

如果视频完全下载,这实际上效果很好。在这种情况下,一切都很好,之后我可以在本地访问视频。

但是,在应用程序中可能会发生视频下载被中断并因此需要取消的情况。如果是这种情况,我想删除存在但显然不完整的文件。

删除文件的代码如下:

最后一行fileProvider.delete(fileToDelete, null, null);抛出 a NullPointerException,我对其进行了调试,发现它fileProvider已初始化,因此我强烈认为我用来调用的 URI 存在问题delete,但我不知道它有什么问题。有谁知道如何使用文件提供程序进行正确删除?

更新:我希望这不是矫枉过正,我现在发布我的VideoDownloader全班:

另一个更新:这是我的堆栈跟踪:

0 投票
1 回答
1708 浏览

android - 如何使用 FileProvider 获取文件列表

A 正在开发 Android 项目。我需要提供 ContentProvider 以提供对某些目录的访问。FileProvider 这对我来说是一个很好的解决方案。是否可以使用 FileProvider 检索目录中的文件列表?

0 投票
1 回答
135 浏览

commonsware-cwac - StreamProvider - getExternalFilesDir - 是否有多个外部的语法?Android 4.4 上的 MicroSD 卡

我有一个现代的 Android 4.4 设备 - KitKat 4.4 附带的 LG L34C

相对于https://github.com/commonsguy/cwac-provider库 - 我看到提到了 getExternalFilesDir - 但不是复数版本。

我对 getExternalFilesDirs() 的测试表明,返回的数组索引对于“emulated /sdcard”有 0,而索引 1 有实际的外部 SD 卡。

是否可以获得与复数 getExternalFilesDirs 二级索引一起使用的 paths.xml 语法?

0 投票
0 回答
59 浏览

android - Android ContentProvider 创建文件

假设我有两个应用程序FooBar. 我FileProvider为这两个应用程序创建了一个并定义它们Manifest以允许具有相同签名的应用程序访问,即使用相同的密钥库签名。

我的问题是:有没有人成功地使用insert(Uri uri, ContentValues contentValues)从一个应用程序到另一个应用程序创建文件,即应用程序使用应用程序内部存储中的Foo数据创建文件?ContentValuesBar

0 投票
0 回答
417 浏览

android - Google+ 照片 ACTION_VIEW、FLAG_GRANT_PERSISTABLE_URI_PERMISSION 异常

在我的应用程序中,我希望能够根据文件类型在外部查看器中打开内部文件。我在应用程序清单中设置了一个 FileProvider,如下所示:

我使用以下代码显示应用程序选择器以查看文件。

这适用于大多数应用程序,但是如果我在列表中选择 Google+ 照片应用程序,虽然图像可以在 Google+ 照片中正常加载,但如果我尝试通过用手指捏来放大图像,它会立即崩溃。Google+ 照片似乎失去了对该文件的访问权限,当它再次尝试读取该文件时,它被拒绝访问。

我尝试过的所有其他应用程序都可以完美运行任何建议表示赞赏

0 投票
2 回答
2315 浏览

android - 为什么将 FileProvider 用于外部文件?

我理解为什么 FileProvider 对于与另一个应用程序共享一个应用程序的私有文件(应用程序内部存储中的文件)很有用,同时控制权限。

文档解释了如何使用它来共享外部存储(SD 卡等)中的文件:

<external-path name="name" path="path" />

代替

<files-path name="name" path="path" />

https://developer.android.com/reference/android/support/v4/content/FileProvider.html

这有什么意义?为什么需要为此使用 FileProvider?另一个应用程序已经可以访问外部存储,因此任何其他应用程序都需要文件路径,而不是 URI。我错过了什么?

0 投票
1 回答
467 浏览

android - 发送电子邮件时响应 Gmail 附件的 Intent.ACTION_GET_CONTENT 失败

我正在尝试创建一个文件选择器来连接云存储服务。我将文件附加到其他应用程序时没有问题,甚至 Gmail 也成功地取回了我的活动结果,并根据我设置的 URI/clipdata 显示了正确的缩略图。

问题在于,当您实际发送电子邮件时,Gmail 会通知用户“无法发送附件”并发送不带附件的电子邮件。

我不知道我做错了什么。我尝试将 URI 设置为 Intent.setData() 以及使用 URI 并设置 Intent.setClipData()。此外,我尝试明确包含 FLAG_GRANT_READ_URI_PERMISSION 的标志。这些东西都不能解决问题。

任何知道可能出了什么问题的人,请插话。其他云提供商在通过此流程附加他们的内容时似乎没有问题,所以我只是不知道我做错了什么。

我的代码现在大致如下所示,但仍然不适用于 Gmail: