- 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/
如果我有一个 MongoDB 副本集,其中有 3 个节点(主要节点、次要节点、仲裁节点),并且主要节点出现故障,现在次要节点成为主要节点,您如何动态处理客户端中的更改,以便它们现在写入基本的? 我在开
我正在研究使用 MongoDB ReplicaSet 实现高可用性。 但是刚刚发现在3个节点的ReplicaSet中,如果PRIMARY mongod是唯一剩下的(也就是另外2个mongod实例死亡或
我有一个表 person 包含个人信息,我还有另一个表 person_contact 来存储关于那个人的联系信息(type 显示如果它是电话记录或电子邮件记录,record 包含实际的电话号码或电子邮
堆栈:使用 Ambari 2.1 安装 HDP-2.3.2.0-2950 源数据库模式位于 sql server 上,它包含几个表,它们的主键为: 一个varchar Composite - 两个 v
对于典型的现代 RDBMS,期望通过一个特定的主键查询与通过键查询哈希表一样快,是否正确? 或者是否有“实际工作”来遍历表并跟踪主键值?即使有主键的自动索引,这似乎也是不可思议的浪费。 最佳答案
我正在使用 dataset尝试将 postgres 数据库备份到 sqlite 文件中的库。我正在运行的代码如下: local_db = "sqlite:///backup_file.db" with
堆栈:使用 Ambari 2.1 安装 HDP-2.3.2.0-2950 源数据库模式在 sql server 上,它包含几个表,这些表的主键为: 一个变量 复合 - 两个 varchar 列或一个
INT PRIMARY KEY 和 INTEGER PRIMARY KEY 在定义表的模式时有什么区别吗?使用 int 主键时,我生成了 sqlite_autoindex thing;当整数主键时,我
我通过阅读一本书开始学习 JPA,他们给出了一个单向映射,如下所示: 表格车辆 (vehicleId, brand, model, dev_year, extraId) vehicleId is th
查看“mysqldump -d”并看到一个键是 KEY,而不是“PRIMARY KEY”或“FOREIGN KEY” 什么是关键? 示例: CREATE TABLE IF NOT EXISTS `TA
我已经有了一个包含一些数据的表格。现在我想添加一个新列“id”并使其成为主键。我正在使用 MySQL 工作台。所以,我只是添加一个新 key ,然后将其设置为 PK 和 NN。但不知为何,这个看似简单
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
为什么这会显示警告,因为它默认从 User 模型中获取主键,所以我还应该再次将主键声明为 Registration 或候选模型。 模型.py from django.db import models
在创建域模型时,我们的实体几乎总是有 Id 字段或属性,代表数据库中相应表的主键列。我的问题是 - 如果我有这个与域模型无关的关键属性(换句话说,它只是数据库问题;Martin Fowler 更喜欢将
如果将标识列作为主键是一种好的做法,请问您是否有意见?对于 ORM 工具,表上有标识列会有所帮助。但是还有其他副作用,例如意外重复插入。 谢谢奈恩 最佳答案 是的,使用 INT(或 BIGINT)ID
我试图在谷歌上找到它,但那里给出的答案并不令人满意。任何人都可以解释明显的区别。 实际上,如果使用主键来唯一选择数据,那么唯一键有什么需要? 什么时候应该使用主键,什么时候应该使用唯一键? 最佳答案
Hybris HAC 中的 PK 分析器因某种原因被阻止。有没有其他方法可以确定这个 PK 属于哪个项目? 提前致谢 最佳答案 尝试使用 HMC: _your_server_/hmc/hybris?o
我在“表类别”中删除了一行(第 20 行),请告诉我如何重新排序 catid(主键)?此时是19点后的21点。 谢谢 最佳答案 你不能。您能得到的最接近的是 truncate table ,这将删除表
这是我的购物车表数据库,当我将产品添加到购物车表时出现错误 Database mysql_query($query, $db) or die(mysql_error($db)); $query = '
我正在编写一个谱系应用程序,我正在尝试弄清楚我的数据库模型的各个方面。 我有一张供人们使用的 table : create table person ( id int unsigned not n
我是一名优秀的程序员,十分优秀!