- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Android 4.4 访问外部存储的新规则似乎破坏了许多应用程序。
根据这个:http://source.android.com/devices/tech/storage/ (仔细阅读)似乎 WRITE_EXTERNAL_STORAGE 权限不再授予对 Android 4.4 中/mnt/external_sd 路径的辅助可移动存储的访问权限。他们说应用程序只能访问辅助可移动存储上的私有(private)文件夹,当应用程序被删除时,它也会被删除。
现在,我认为,根据隐含的内容,WRITE_EXTERNAL_STORAGE 将改为授予对主要外部存储/mnt/sdcard 的访问权限。
如果为真,则有可能,例如,我的应用程序启动另一个应用程序并向其提供主外部存储中的 file://url,然后被调用的应用程序可以编辑文件并将其保存到同一个路径,前提是它具有 WRITE_EXTERNAL_STORAGE 权限。
Android 4.4 是否以这种方式处理主要外部存储访问?
最佳答案
你是对的,但要了解原因,让我们来看看不同类型的外部存储及其权限系统的详细信息。
主要外部存储
在 KitKat 外部存储模型中,每个应用程序都被授予访问主要外部存储上的特殊主目录的权限。应用始终可以读取和写入这些外部主目录的内容, 无需特殊权限。但是,与应用程序的内部主目录不同,外部主目录在某些情况下也可以被其他应用程序访问。 READ_EXTERNAL_STORAGE 为应用程序提供对主要外部存储器的完全 读取访问权限,即使是那里的所有主目录也是如此。然而,WRITE_EXTERNAL_STORAGE 授予对主要外部存储的写入和读取权限。现在让我们问一下,如果任何持有上述权限的人都可以篡改它们,为什么还要有一个主目录?原因是那些新的外部主目录并不意味着安全边界。它们的特别之处在于,Android 会在卸载拥有的应用程序后立即自动删除它们,因此我们在这里进行了自动清理。这也意味着您根本不应将应用程序的私有(private)数据(如凭据)或可利用的内容(如配置文件)存储在外部存储器上。同样不错的是,媒体扫描器会忽略那些主目录。另请记住,这部分内存可以安装在 Android 有效失去对数据的控制的计算机上。
二级外部存储
在这里,外部主目录的概念再次出现,应用程序可以在不需要许可的情况下存储它们的数据。同样,这些特殊目录会在所有者应用程序卸载时自动删除,并且不提供安全性,因为 sd 卡可以在计算机上任意安装和修改。但是与主外部存储相比,主目录之外的所有数据在这里都是只读的。所以实际上没有写访问权限,因为这根本不是有意的。
你的例子对于您的示例,您是绝对正确的,因为已启动的应用程序被赋予文件 URI 可以任意修改它,前提是它具有正确的权限。
关于安卓 4.4 : is WRITE_EXTERNAL_STORAGE permission effective on primary external storage/mnt/sdcard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24704241/
嗨,当尝试将图像上传到 firebase 存储时,我正在使用 firebase 文档,但是出现此错误。 在范围内找不到“存储” let storage = Storage.storage() le
我最近在使用 Firebase 存储时遇到了一些问题。 当我们尝试访问刚刚上传的文件时,浏览器中出现此错误消息 { "error": { "code": 400,
这些是在不同版本的 NuGet 包之间迁移的重要指南: https://github.com/Azure/azure-sdk-for-net/blob/Azure.Storage.Blobs_12.6
警告: Warning: Can't resolve all parameters for Storage in /Users/zzm/Desktop/minan/node_modules/@ioni
我在圆形立方体中收到此错误(“连接到存储服务器失败”)行。我已经检查了所有内容,配置和数据库用户名密码,服务器详细信息都是干净的。谁能告诉我可能是什么问题。这里我给出了整个配置文件。
我希望能够限制容器的大小,但是使用默认的存储驱动程序aufs(对于Ubuntu 14.04),当我尝试使用--storage-opt参数时出现错误 $ docker create -it --name
我希望能够支持对使用 Google Cloud Storage 托管的静态 Assets 进行 Brotli 和 Gzip 编码。为此,我想在将文件上传为 之前对其进行编码, .gz和 .br .问
场景 我有几个由 Google Cloud Storage object.finalize 事件触发的 Google Cloud Functions。为此,我使用两个存储桶并使用“同步选项:覆盖目标位
我在 Google Cloud Storage 中有一个存储桶和一个网站。人们目前可以通过网站上传到存储桶(使用 Google 身份验证)。 但是,我需要设置它以便任何人都可以查看上传的文件(并且不能
如果文件被放入 Google Cloud 存储并公开,但该文件的网址在另一个网页上不存在,那么 Google 是否会在其搜索结果中将其编入索引?有人知道吗? 最佳答案 Google 的搜索索引独立于其
截至今天早上,我无法访问我的存储桶。 当我在导航上选择 Google Cloud Storage 选项卡时,一切都按预期加载,但不是显示我的两个存储桶,而是显示一个警告栏说: We were unab
我想弄清楚是否可以在 Windows 平台上使用 gsutil 的 cp 命令将文件上传到 Google Cloud Storage。我的本地计算机上有 6 个文件夹,每天都会向其中添加新的 pdf
我最近开始使用 Google Cloud Storage。最初我在安装 Cloud SDK 时创建了一个虚拟项目。现在我正在做另一个项目。 gsutil 仍然指向我以前的项目。我如何使它指向我的新项目
我目前正在这样做,但它非常慢,因为我的存储桶中有几 TB 的数据: gsutil du -sh gs://my-bucket-1/ 对于子文件夹也是如此: gsutil du -sh gs://my-
这可能看起来很天真,我知道我们可以在 blob 中创建文件夹,并且这些文件夹仍然存储在容器中。我们仍然可以对这些“blob 中包含的文件夹”执行通常对文件存储中的文件夹执行的所有操作。 我们仍然可以像
将文件上传到 Google Cloud Storage 时,有一个自定义数据字段元数据。 Google's example相当短: var metadata = { contentType: 'a
这可能看起来很天真,我知道我们可以在 blob 中创建文件夹,并且这些文件夹仍然存储在容器中。我们仍然可以对这些“blob 中包含的文件夹”执行通常对文件存储中的文件夹执行的所有操作。 我们仍然可以像
我有一个包含超过 2 万个文件名的 Google Storage 存储桶。有没有办法在短时间内列出存储桶中的所有文件名? 最佳答案 这取决于您所说的“短”是什么意思,但是: 您可以做的一件事来加快列出
有谁知道如果文件不存在,您是否需要为 Google Cloud Storage 中的文件请求付费?换句话说,有人访问您存储桶中不存在的文件是否计入您的请求?还是仅适用于存在的文件? 最佳答案 客户无需
在每一分钟结束时,我的代码总共会上传 20 到 40 个文件(从多台机器上并行上传大约 5 个文件,直到全部上传完毕)到 Google Cloud Storage。我经常收到 429 - Too Ma
我是一名优秀的程序员,十分优秀!