- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在构建一个替代原生 Android 共享对话框的选择器应用程序。它工作正常,除非我尝试通过长按图像 > 共享图像从 Chrome 共享图像。
我发现 Google+ 没有捕捉到异常(它崩溃了),所以我可以通过 Logcat 查看它:
java.lang.SecurityException: UID 10130 does not have permission to content://com.android.chrome.FileProvider/images/screenshot/15307295588677864462883877407218.jpg [user 0]
我的代码(简化版):
@Override
public void onCreate() {
handleIntent();
}
private void handleIntent() {
// Get intent and payload
mIntent = getIntent();
mPayloadIntent = (Intent) mIntent.getParcelableExtra(Intent.EXTRA_INTENT);
// Nullify some things for queryIntentActivities (or no results will be found)
mPayloadIntent.setComponent(null);
mPayloadIntent.setPackage(null);
// Retrieve a list of targets we can send mPayloadIntent to..
List<ResolveInfo> targets = context.getPackageManager().queryIntentActivities(mPayloadIntent, 0);
// etc...
}
private void onClickTarget(ResolveInfo target) {
// Prepare..
ComponentName compName = new ComponentName(
target.activityInfo.applicationInfo.packageName,
target.activityInfo.name);
// Build a 'new' shareIntent
Intent shareIntent = new Intent(mPayloadIntent);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
shareIntent.setComponent(compName);
// Start the targeted activity with the shareIntent
startActivity(shareIntent);
finish();
}
AndroidManifest.xml:
<activity
android:name=".ActShareReplace"
android:label="Sharedr"
android:theme="@style/AppTheme.TransparentActivity"
>
<intent-filter>
<action android:name="android.intent.action.CHOOSER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
如果我查看 Intent.ACTION_CHOOSER 的文档它说:
If you need to grant URI permissions through a chooser, you must specify the permissions to be granted on the ACTION_CHOOSER Intent in addition to the EXTRA_INTENT inside. This means using setClipData(ClipData) to specify the URIs to be granted as well as FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION as appropriate.
我不完全确定这是我的应用程序必须执行的操作,还是调用选择器 Activity 的应用程序的责任 - 但我认为是后者。我的应用无法为其接收的 Intent 设置 URI 权限,对吗?
无论如何,如果我检查 mIntent
和 mPayloadIntent
上的附加项和标志,我会得到:
mIntent 只有额外的东西,没有标志(据我所知):
android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER IntentSender{4fa3901: android.os.BinderProxy@3aec3a6} (android.content.IntentSender)
android.intent.extra.INTENT Intent { act=android.intent.action.SEND typ=image/jpeg flg=0x80001 clip={image/jpeg U:content://com.android.chrome.FileProvider/images/screenshot/15307316967108618905323381238187.jpg} (has extras) } (android.content.Intent)
android.intent.extra.TITLE Share via (java.lang.String)
mPayloadIntent:
android.intent.extra.STREAM content://com.android.chrome.FileProvider/images/screenshot/1530731945132897653908815339041.jpg (android.net.Uri$HierarchicalUri)
所以 mPayloadIntent
确实有 FLAG_GRANT_READ_URI_PERMISSION
但 mIntent 没有。根据文档,它应该。
我读到我的应用可能使用了 URI 权限,所以 I tried caching the file myself但是当我尝试通过 ContentResolver 访问 URI 时,我得到了一个 - 你猜对了 - 权限错误。
然后我意识到我可能不必将文件缓存为 Android 的 native Chooser Activity似乎也没有这样做。这就是我现在所处的位置。回到第一点。
这是 Chrome 的错误吗?安卓漏洞?还是我做错了什么?
我很乐意责怪 Chrome 并提交错误报告,但从事类似项目(并遇到相同问题)的人告诉我 Whatsapp 也有类似问题。它也通过 content://uri 共享图像。
为了完整起见,我在装有 Android 8.1 的 Pixel 2016 上对此进行了测试。我不知道另一个人(在 WA 上遇到了同样的问题)正在使用什么。
最佳答案
Is this a Chrome bug? An Android bug? Or am I doing something wrong?
我的猜测是这是一个客户端错误,来自于人们直接创建 ACTION_CHOOSER
Intent
对象而不是通过 Intent.createChooser()
。 Intent.createChooser()
看起来它正在从您所谓的 mPayloadIntent
中获取标志,并将它们添加到 mIntent
。
您应该可以自己测试一下。创建一个剪贴板应用,它创建一个 ACTION_SEND
Intent
,其中 EXTRA_STREAM
指向一些内容(例如,由 FileProvider
提供) >).然后,尝试通过三种方式调用您的选择器:
通过Intent.createChooser()
Intent
通过 ACTION_CHOOSER
Intent
包装 Intent
,您可以按照文档所说的进行操作,并将标志放在 上>Intent
对象
通过 ACTION_CHOOSER
Intent
包装 Intent
,您可以跳过 ACTION_CHOOSER
上的标志 Intent
如果我是正确的,#1 和#2 将起作用,而#3 将失败并出现与您所看到的相同的基本故障模式。
如果到目前为止我的理论成立,请尝试再次运行这三个应用程序,但这次使用系统选择器。我的猜测是,系统选择器确实从成为核心操作系统的一部分中获得了一些特殊的好处,并且所有三个都可以工作。否则,Chrome 和 WhatsApp 的开发人员会在他们的测试中遇到这个问题并会修复它。
而且,如果所有这些理论都站得住脚……你就有点搞砸了。我假设更多的人使用 Intent.createChooser()
而不是直接使用 ACTION_CHOOSER
,因为 Intent.createChooser()
更简单。而且,部分使用 ACTION_CHOOSER
的人实际上可能会遵循文档...
hahahahahahahahahaha...gasp ...hahahahahahahahahaha!
...对于那些,你没问题。而且,某些使用 ACTION_CHOOSER
的人可能在 EXTRA_STREAM
中有一个世界可读的 Uri
(这不是一个好主意,但它可以工作在这里对你有利)。它仅适用于手动创建 ACTION_CHOOSER
、未能正确设置 Intent
标志但确实正确保护其内容的有问题的客户端,您将无法正确处理 Intent
。
关于android - 自定义选择器 Activity : SecurityException UID n does not have permission to content://uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179904/
什么是 SASS 方法要求干燥这样的东西: .content p, .content ul, .content li, .content a 最佳答案 这 4 个元素都有共同的样式吗? .conten
我正在评估 Contentful.com 作为 Angular SPA 的内容引擎。 我面临的问题是按内容类型检索条目(例如,获取“博客”类型的所有条目)。如 documentation exampl
在我编辑的主 wiki 上有一个名为 Item: 的自定义命名空间,提示是该命名空间内的每个页面都显示为 Item:This_item - - Item:That_item -- Item:Foo_i
我正在尝试编写一个Python脚本,可以将图片和pdf上传到WordPress。我希望图像上传到文件夹‘/wp-Content/Uploads/’,将pdf文件上传到文件夹‘/wp-Content/U
是否可以监控进行了多少次 Contentful API 调用,并理想地在即将超过配额时收到通知? 谢谢 最佳答案 当然,您可以在右侧用户配置文件的下拉菜单 > Organizations and Bi
我在尝试在 IE8 中下载带有分号的文件名时遇到问题。 Response.AddHeader("Content-Disposition", "attachment; filename=\"" + at
我在 Contentful Delivery API 中运行查询以返回基于它的 slug 的特定页面项目。这个查询还设置了语言环境,以便它只返回我需要呈现的语言的数据。 但是,我还需要设置页面的 hr
我有兴趣使用 Gatsby建一个Netlify使用来自 Contentful 的内容的静态网站 Netlify 有这个不错的 Gatsby 入门指南: https://www.netlify.com/
目标是提交一个 git 分支。分支的“git status”的输出是: On branch zeromq_new Your branch is up to date with 'origin/zero
我目前正在学习在 ASP.NET 3.5 和 C# 中使用 MasterPages 和 ContentPlaceHolders - 现在,我正在拼命尝试通过我的编程代码编辑 asp:Content-C
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我使用 bootstrap 3 作为我的网格框架和 CSS 来创建一个具有一个倾斜/倾斜边缘的半透明区域,但由于分层不透明度,我的元素遇到了问题。 期望是中心是倾斜的,但右侧仍然是正方形。 有没有更好
IllegalArgumentException: 未知 URL 内容:// ^ 对上述内容做了噩梦。我检查了我的变量和路径,但看不出问题是什么?非常感谢任何指点! 这是我的痕迹。 java.lan
我有两个元素:一个是 元素,另一个是 元素。 populated-drop-down extends drop-down ,但是,正如您可能已经猜到的那样,它会尝试使用一些选项预先填充它。假设我可以简
我想我也有同样的问题。 Using multiple yields to insert content 我尝试了这个解决方案。我试过 在我的 application.html.erb 中有 conte
此链接 ( https://css-tricks.com/snippets/css/a-guide-to-flexbox/ ) 表示 justify-content 和 align-content 的
我现在正在探索绑定(bind),并且有一个 NSPopUpButton - 它为我提供了一些值选择下的绑定(bind)选项 - Content , Content Objects , Content
正在尝试在内容页面中加载内容 View 。当我运行代码时,它不会出现在我的内容 View 中。我正在从我的内容页面分配两个可绑定(bind)参数。 内容页面: 内容 View :
我想从我的 :before 标签中获取 content。我知道有些人会说它不是真正的(伪)元素,但在 JS 中有一种方法,但有人可以帮助我在 JQ 中做到这一点,因为我有多个标签并且我想用 $.eac
我创建了一个.sh脚本,并将结果记录在一个文件中,执行后我会尝试将文件内容作为mail正文发送。 这是我运行的命令: sh update.sh >> update.$(date +"%Y-%m-%d:
我是一名优秀的程序员,十分优秀!