问题标签 [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.
android - FileProvider 在 GetUriForFile 上引发异常
我遵循了FileProviders 上的 android 开发人员参考中的示例代码,但它不起作用。
我已经files/exports/
在我的清单中的文件提供程序定义中设置了路径,并且引用的文件确实存在于该路径中。
在我的清单中:
而在xml/file_paths.xml
然后我尝试使用以下代码获取 content-uri:
但是我收到此错误:
更新
从 Android 源代码中我可以找到它,因为我现在知道这个命令android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:243)
将失败并返回null
:
但我不知道为什么...
android - Android 和 FileProvider 以及从 URI 获取路径
我有一些令我困惑的问题。我似乎无法获得基于文件的 Uri 的正确真实路径。这是带有最终结果变量值的代码,如下所示:
不同变量的最终结果:
- sharedFile_Path = "/data/data/com.example.app/files/shared/camera.jpg"
- contentURI_Path_Simple = "/providershared/camera.jpg"
- contentURI_Path_Real = ""
可以看出,问题在于contentURI_Path_Real的值,这就是SharedCode.sharedGetRealPathFromURI的完整代码在这里的原因——我最初通过 SO 找到的东西:
单步执行代码时,似乎if (idx > -1)产生false。
...
这是AndroidManifest.xml的相关代码
这是provider_filepaths.xml的完整代码
...
最后,在调用相机意图时,我需要一个有效的myContentUri_Camera :
就像现在一样,如果传递了myContentUri_Camera ,相机会在完成后使应用程序崩溃 - 在onActivityResult返回之前。我怀疑这是因为它没有“真实路径”,这就是我在这里询问路径问题的原因。
android - 未能找到包含的已配置根
我收到以下错误:
当我尝试将 myFileProvider
与 muzei 应用程序一起使用时。
我有一个活动(它将一些位图从可绘制文件夹添加到/data/data/APP-SPACE-HERE/files/
)和一个扩展的类MuzeiArtSource
:
清单文件包含provider
forFileProvider
和service
tags :
我在文件夹中也有这个 xml 文件res/
:
我昨天提出了这个问题,但问题是关于 uri 名称。我adb shell
用去指定的路径/data/data/com.sample.muzeitest/files/wallpaper0.png
,我可以确认文件已经保存在那里。还阅读一些关于 SO 的类似问题,但没有任何帮助。
android - 其他应用程序可访问的应用程序文件文件夹
我有两个生成一些文件的应用程序,我希望这些文件在服务器上同步。为了避免代码重复,我只创建了一个后台工作线程来同步这些文件。在这一点上,我有两个独立的问题:
- 让一个工作线程在服务器上同步两个应用程序的文件是一种好习惯吗?
- 假设工作线程在 app1 中,app1 如何访问 app2 的文件?
我做了一些研究,发现如果我使用数据库,ContentProvider 将是一个很好的方法。
android - 通过意图共享图像时权限被拒绝
我正在尝试使用 .apk(在 res/drawable 中)从应用程序的 .apk 中共享图像Intent
。按照 developer.android.com 文档([1]、[2]、[3]),我认为我需要执行以下操作:
- 从 res/drawable 作为 a 获取图像
Bitmap
并将其保存在应用程序的内部存储中, - 使用 a
FileProvider
,获取图像的内容 uri, - 创建一个
Intent
withACTION_SEND
动作并将 uri 添加为流 - 将
Intent.FLAG_GRANT_READ_URI_PERMISSION
标志添加到意图
在实践中,我刚刚创建了默认的“Hello World”应用程序,将主活动中的文本视图替换为触发图像共享的按钮,并尝试从 res/drawable 共享标准 ic_launcher.png 图像。
一切运行良好,直到我在选择器对话框中选择要与之共享图像的其他应用程序。无论我选择什么(Adobe Reader、Facebook、MMS),接收图像的应用程序都会崩溃并在其日志中报告以下错误:
使用 Android 调试监视器,我可以看到图像文件是在应用程序的内部存储中创建的rw
,拥有所有者权限,其他人没有权限。
更新 我终于有时间在手机(4.3)和平板电脑(4.2)上更彻底地测试了。在这两种设备上,我得到了完全相同的结果。日志中始终会出现“Permission Denied”警告,但最终结果可能因应用而异:
- 标准 Android 电子邮件应用程序 - 电子邮件发送时没有错误/崩溃,但不包含附件,
- Gmail 应用程序 - 发送带有 附件的电子邮件(这是我发现上述代码有效的唯一情况),
- Facebook、Twitter、Adobe Reader - 这些都在选择器对话框中选择时崩溃;
这是否意味着从应用程序的内部存储中共享(图像)资源没有“标准”方式,并且共享逻辑需要根据接收应用程序进行自定义?
AndroidManifest.xml:
资源/文件路径.xml:
活动 xml:
活动.java:
android - startActivityForResult 在 Android 4.4 版(Kitkat 版)中不起作用
通过我的应用程序,用户可以从文件管理器中选择一个文件并处理选择的文件(示例:PDF 文档)以进行其他步骤,例如打印或发送电子邮件。
为此,我使用下面的代码来显示意图,用户可以从中选择文件管理器选项中的文件。
Android Kitkat 版本(4.4)中的问题:
使用上面的代码,我可以从 android 4.3 和除 Android 4.4 之外的所有 android 版本的文件管理器(即子文件夹和根文件夹)中访问所有文件。
在 Android 4.4 中,我可以从根文件夹访问文件,而我无法从子文件夹访问文件。我得到java.io.FileNotFoundException
了例外。
注意:我安装了Astro 文件管理器,通过它我可以访问 Android 4.4 中的根文件夹和子文件夹。但我无法通过 Android 的默认文件管理器访问子文件夹文件。
android - 如何使 FileProvider 可用于其他应用程序?
是否可以让其他应用程序使用 FileProvider?
清单.xml
从文档:
false:提供程序不可用于其他应用程序。设置 android:exported="false" 以限制对您的应用程序的提供程序的访问。只有与提供者具有相同用户 ID (UID) 的应用程序才能访问它。
我尝试将 export 设置为 true 但出现此异常
Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported
为什么我无法导出 FileProvider ?
android - 图像共享意图适用于 Gmail,但会导致 FB 和 twitter 崩溃
我正在尝试允许用户将图像共享给设备上的其他应用程序。该图像位于我的应用程序内部存储区域的 files/ 子目录中。它适用于 Gmail,但 Facebook 和 Twitter 在响应我的意图时都会崩溃。
编辑:Google+ 也可以正常工作。
以下是相关的代码部分。
在 Application.xml 中
xml/文件路径.xml
这是我活动中的共享代码:
记录时的值contentUri
是:
content://org.iforce2d.myapp.MyActivity/shared/snapshot.jpg
我只使用 Gmail、Facebook 和 Twitter 作为接收应用程序进行了检查,但结果在各种操作系统版本(从 2.2.1 到 4.4.3)和 7 种设备中都非常一致,其中包括 Kindle。
Gmail 运行良好。图像缩略图出现在邮件合成中,并在发送时成功附加到邮件。
Twitter 和 Facebook 都崩溃了,如下所示。
这是来自 logcat 的堆栈跟踪,显示了这两个应用程序遇到的问题,它们似乎都是相同的问题(这取自 4.4.3,但回到 2.2 时,错误实际上是相同的。 1 尽管错误消息的措辞略有不同):
鉴于在 Facebook 和 Twitter 上分享图片是数百万人整天都在做的事情,我对它如此难以实施感到非常震惊:/
谁能发现我在这里做错了什么?
android - Android - 文件提供者 - 权限拒绝
我有两个应用程序:app1 和 app2。
App2有:
路径.xml:
App2 在其 Activity 中从 App1 接收请求以获取图像的 URI。一旦确定了 URI,App2 Activity 就会执行以下操作:
从 App2 收到结果后,App1 执行以下操作:
在 App1 中,从 App2 返回时,出现以下异常:
java.lang.SecurityException: Permission Denial: 从 ProcessRecord{52a99eb0 3493:com.android.App1.app/u0a57} (pid=3493, uid=10057) 打开提供程序 android.support.v4.content.FileProvider 不是从用户识别码 10058
我究竟做错了什么 ?
android - 将私人存储的图像共享到外部应用程序 - Android
我正在尝试将图像保存到我的应用程序的私有文件系统,然后与外部应用程序共享该图像。我已经调查过了,似乎最好的方法就是保存到目录中,filesDir
因为如果您使用该externalFiles
目录,某些设备可能没有。到目前为止,这是我的代码(为简洁起见):
使用我的图像进行的活动
ShareOptions.java
AndroidManifest.xml
xml/file_paths.xml
一旦发送意图,Twitter 应用程序就会崩溃。我查看了 Twitter 中的错误日志,似乎它可能是权限问题。我认为即使使用我目前拥有的代码,Twitter 也无权访问 Uri。
任何和所有的帮助表示赞赏!