- 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/
因此,这更像是关于防止 DoS 攻击的最佳实践的一般性问题,我只是想了解大多数人如何处理来自同一 IP 地址的恶意请求,这是我们目前遇到的问题。 我认为最好尽可能高地阻止真正恶意 IP 的 IP,以防
我正在使用sound_stream包从麦克风获取流,并将其发送到Google Speech To Text Api。当我尝试使用简单的屏幕(如仅一个按钮)来开始收听和获取转录时,它工作正常。我可以立即
我的 Android 应用程序存在权限问题:这里是日志。 06-25 17:25:35.862 12039-13799/? E/DatabaseUtils﹕ Writing exception to
用于运行的应用程序。然而,就在最近它开始停止工作。该设备运行的是 Android Nutella。下面是 LogCat。 java.lang.SecurityException: Permissio
我正在尝试编写一个简单的 android 应用程序来关闭我的手机屏幕。当我运行这个应用程序时,我得到安全异常:权限拒绝应用程序需要 android.permission.DEVICE_POWER。我知
我正在尝试使用 DownloadManager 下载文件。是的,我知道人们已经遇到了这个错误。但我的似乎没有解决。我每次都试过了。 我已经取消了这个权限: 我的代码 public void st
我设置了一个 ContentProvider,仅供我的应用内部使用,用流响应 URI,我通过该流构建并提供一个 zip 文件。 Uri 作为额外的 (Intent.EXTRA_STREAM) 传递给
我点击我的 AdView 并在 Play 商店中打开 alibaba app 页面,然后安装它。之后,我开始收到此错误,每当我点击 AdView 时,我的应用程序就会崩溃。卸载这个阿里巴巴应用程序后,
我刚刚升级到新版本的 gmail (v2.3.5),我有一个应用程序可以查询内容提供者以获取有关接收消息的联系人的详细信息...... 对于最新版本,我收到以下错误: java.lang.Securi
我的构建被破坏了,因为 yarn audit说我的依赖项存在漏洞: yarn audit yarn audit v1.22.5 ┌───────────────┬───────────────────
我成功地让这些 c2dm 实现在我的应用程序上运行。 当设备突然没有收到 c2dm 消息时,我遇到了一个问题。这次它拒绝了我的许可,我对此感到困惑: Permission Denial: receiv
不幸的是,当我尝试运行我的墙纸时,我收到一条错误消息,提示 Permission Denial starting Intent 并且需要 android.permission.BIND_WALLPAP
我是 android 开发的新手。在我的应用程序中,我有一个显示在 ListView 中的联系人类。对于我的联系人,我有一张从图库中获得的图像,图像 uri 存储在数据库中。在我最后Post 我的问题
我正在学习有关在 Android 应用程序中使用相机的教程。我在模拟器和物理设备上运行调试时收到错误“权限拒绝:无法使用相机”。我在 list 文件中尝试了多种权限。似乎大多数遇到此错误的人都有错字、
我的程序一直运行良好,但我想我一定是不小心更改了一些我不应该做的事情。我让我的程序在按下按钮时运行“UpdateService”,但现在它不运行,并且调试显示以下两行: 01-05 21:43:39.
我有以下问题。我们创建了一个游戏中心应用程序,它提供了一个框架来创建临时 wifi 游戏并管理此类游戏的高分/遭遇。 高分的数据库访问是通过提供者完成的: 我们的演示游戏(作为 future 游戏
我在 Oreo Android 8.0/8.1 设备上使用日历提供程序时遇到应用程序崩溃问题。在运行 Nougat 及以下版本的我的设备上未显示该问题。 Permission Denial: read
我的应用中有两个 Activity ,MainActivity 调用 ImagePicker,它有一个 GridView 布局手机图库中的所有图像,我使用 ContentResolver 来获取光标。
背景 我有一个根设备,它是 Galaxy S3 I9300,带有基于三星股票的 ROM,基于 Android 4.3。 我在使用此设备上运行的应用程序从未遇到任何问题。 问题 从昨天开始(并且我没有在
我目前正在调整我的应用以适应 Android 11。当我想共享文件时,我在 logcat 中收到以下错误消息: Permission Denial: reading androidx.core.con
我是一名优秀的程序员,十分优秀!