- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我设置了一个 ContentProvider
,仅供我的应用内部使用,用流响应 URI,我通过该流构建并提供一个 zip 文件。
Uri
作为额外的 (Intent.EXTRA_STREAM
) 传递给 Intent
(Intent.ACTION_SEND
) )以便发送。然而,这样做时,它会间歇性地失败,并出现以下异常:
E/DatabaseUtils(26058):java.lang.SecurityException:权限拒绝:从 pid=26141、uid=10038 读取 MyContentProvider uri content://spinner.myapp.db/file/stream/zip/1要求导出提供程序,或 grantUriPermission()
我尝试通过 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
授予权限,但这没有用。我也不明白为什么我需要授予权限,因为只有我自己的应用程序正在访问 ContentProvider
。
更新:
我现在也尝试使用 setClipData()
,但没有成功。 Gmail 显然忽略了 Uri,Dropbox 崩溃了。
String[] mimeTypes = { "application/x-compressed" };
ClipData clip = new ClipData("zip data", mimeTypes, new ClipData.Item(uri));
intent.setClipData(clip);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
最佳答案
Ah, I see, so the sending apps have to have their own permissions granted for each Uri, rather than it being implicitly provided by the calling app's Intent?
我对你的术语感到困惑,所以让我尝试一下这种方法:
有四种基本方法来实现 ContentProvider
:
将其导出并且不受任何权限的保护。这太愚蠢了。不要这样做。
将其导出,但受权限保护(例如,android:readPermission
和 android:writePermission
属性)。这很有效,但仅适用于专门为与您的 ContentProvider
通信而编写的应用。它不适用于那些ContentProvider
先验知识的应用,例如大多数ACTION_SEND
支持 Activity 的实现者。
不将其导出,而是让您针对特定请求授予 Uri
权限。通常,这是通过 activity flags like FLAG_GRANT_READ_URI_PERMISSION
完成的添加到与 startActivity()
一起使用的 Intent
中,尽管还有其他方法,例如自己调用 grantUriPermission()
。当您需要第三方访问您的提供商时(例如使用 ACTION_SEND
Intent
启动 Activity ),此方法非常有效。
不将其导出,也不授予对 Uri
的权限。在这种情况下,ContentProvider
仅在您自己的应用中可用,第三方根本无法访问,即使您提出请求(例如您的 ACTION_SEND
请求)。
How can I grant permissions for the app that ends up being chosen to perform the sending, or do I have to grant it to all possible apps?
这导致我的一条评论出现错误,对此我深表歉意。
FLAG_GRANT_READ_URI_PERMISSION
现在会授予对 Intent
中的 Uri
的读取权限,无论该 Uri
是“数据” ” 的Intent
或者是在一个额外的内容中。这将被授予 Intent 的最终使用者——换句话说,选择器不会以某种方式消耗该权限,并且所选 Activity 没有权限。但是,过去,FLAG_GRANT_READ_URI_PERMISSION
只适用于“数据”,而不适用于附加内容中的 Uri
值,而且我完全忘记了该缺陷何时出现已修复。
grantUriPermission()
要求您知道 Intent
的最终消费者是谁,这意味着您需要推出自己的“选择器”,这样您就可以找出用户想要处理您提议的 ACTION_SEND
请求的实际应用。
FWIW,here is a sample app演示了如何使用 FLAG_GRANT_READ_URI_PERMISSION
来查看由 FileProvider
提供的 PDF。
关于java - 有哪些选项可用于解决间歇性 Permission Denial SecurityException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064379/
我正在编写一个 C# 程序(具体来说是一个 IRC 机器人)并使用脚本库 Jint ( http://jint.codeplex.com/ )。我有一个外部命令链接到它,当调用它时,它会从另一个文件读
我有一个具有外部 API 的服务。在某些情况下我必须抛出 SecurityException。奇怪的事情如下:在某些 API 中,当我抛出异常时,绑定(bind)器成功完成此事务并且该异常被服务的经理
我有一个用 C# 编写的应用程序,它位于网络共享上。当我从本地驱动器运行它时,一切正常。当我从远程共享启动它时,调用像 try { System.Reflection.Assembly.Get
如果我自己的 DAO 类无法通过数据存储的身份验证,是否建议在其构造函数中抛出 SecurityException? Java 文档说 SecurityException 将由 SecurityMan
背景 我正在开发一款控制屏幕旋转的 Android 应用。 The app is available on the Google Play store .为了控制屏幕旋转,应用程序禁用了 system
这个问题在这里已经有了答案: Permission Denial: not allowed to send broadcast in android (4 个答案) 关闭 9 年前。 我的应用程序在
我尝试将位置服务作为后台服务运行。它在 Activity 中运行良好,但是当我使用服务时,我得到了 java.lang.securityException:客户端必须具有 ACCESS_COARSE_
我做了一个方法,当进度完成加载时发送本地通知,当我构建应用程序时,一切都清楚,没有任何错误/警告,我在发布 Google 控制台崩溃报告后收到了这个 通知方式如下: public void notif
我正在编写一个 Android 应用程序,作为该应用程序的一部分,我希望用户能够查看、选择和修改用户联系人。出于可用性原因(从用户方面),我的主要 Activity 扩展了 TabActivity。因
我在我的应用程序中使用带指纹的锁屏。虽然它可以与其他具有指纹传感器的手机无缝协作,但三星用户正面临一些 SecurityException,正如我在我的谷歌控制台报告中看到的那样。报告如下: java
我想制作一个能够将文件下载到计算机的小程序,然后在相关的编辑器中打开它们(当文件被保存时,应该会再次上传)。然而,在我花几个小时让它工作之前,我必须确保它实际上是可管理的(用 Java 桌面应用程序而
我的应用程序出现严重问题。我使用权限 android.permission.ACCESS_COARSE_LOCATION在广播接收器中,它运行完美。 但是在一定时间后(这似乎是随机的)应用程序崩溃并显
我在某些 API 6.0+ 设备上遇到以下崩溃: Fatal Exception: java.lang.SecurityException: Client must have ACCESS_COARS
我正在试验 Android AccountManager。 我有一个帐户身份验证服务,显示用于输入用户名/密码的 UI。 我转到设置/帐户/添加帐户,选择我的新帐户类型,然后我会看到 UI。 当我点击
使用此代码时出现上述错误: var userSettings = new UserSettings() { Username = TextBox
我似乎无法在 .NET 中写入事件日志。我得到以下异常: System.Security.SecurityException: The source was not found, but some o
我设计了一个函数,它可以从 SD 获取/设置资源,如果从 sd 中找不到,则从 Asset 中获取它,如果可能,将 Assets 写回 SD 此函数可以通过方法调用检查 SD 是否已安装且可访问...
FileStream 的 MSDN 构造函数表示它可能会抛出 UnauthorizedAccessException 或 SecurityException。以下是 MSDN 关于这些异常的说明。 U
我正在使用 Retrofit 的协程适配器,我发现,如果网络调用因为 URL 不正确而失败,则 try/catch block 将捕获它,但如果我删除 Internet 权限以便我们得到 Securi
我刚刚编写了一个 MVC 应用程序并让它在我的实验室中运行。现在我已将其部署到 GoDaddy,但收到以下错误。 Description: The application attempted to p
我是一名优秀的程序员,十分优秀!