转自:http://blog.csdn.net/cbirdlg/article/details/5896037
Android 6.0 外部存储支持动态权限管理 Adoptable Storage特性 Android 7.0 引入作用域目录访问 ?...实现原理 系统/system/bin/sdcard守护进程,使用FUSE实现类FAT格式SD卡文件系统的模拟,也就是我们经常说的内置SD卡。...影响 Android 6.0以后,由于动态权限管理的需要,会存在多个fuse挂载点,这导致inotify/FileObserver对外部存储进行文件事件监控时,会丢失事件。...当应用被授予读/写权限时,vold子进程会切换到应用的挂载命名空间,将对应的视图重新绑定到应用的外部存储路径上。...): 1.创建新的挂载命名空间; 2.将之前的挂载命名空间在/storage下的挂载全部去除,排除影响; 3.根据mount_mode,选择一个路径; 4.将选择的路径绑定到/storage下。
image.png StorageManager 在Android系统中,常用的存储介质是Nand Flash;系统的二进制镜像、 Android的文件系统等通常都保存在Nand Flash 中。...通常使用的Micro-SD卡的管理则是由卷守护进程(Volume Daemon ,vold)去完成的,包括SD卡的插拔事件检测、挂载、卸载、格式化等。...从Android 2.3开始新增了一个OBB文件系统和StorageManager类用来管理外部存储上的数据安全。...我们 可以通过这个服务获取Android设备上的所有存储设备。...系统提供了 StorageManager 类,它有一个方法叫getVolumeList(),这个方法的返回值是一个StorageVolume数组,StorageVolume类中封装了挂载路径,挂载状态,
因此,越来越多地将SD卡用于外部数据存储, 由于SD卡作为外部存储设备的泛滥,Android的存储命名约定基于以下事实:每个设备都有一个实际的物理microSD卡插槽。...但是,即使在不包含SD卡插槽的设备上,/ sdcard标签仍用于指向实际的内部存储芯片。更令人困惑的事实是,既使用物理SD卡又使用大容量存储芯片进行存储的设备通常会根据SD卡来命名其分区。...例如,在这些设备中,/ sdcard挂载点将引用实际的内部存储芯片,而类似/ storage / sdcard1的引用将引用物理外部卡。...Google希望制造商能效仿他们,并摆脱SD卡。幸运的是,随着时间的流逝,电话制造商能够以更高的容量采购这些组件,同时又保持了成本效益,因此对SD卡的需求开始减少。...sdcard”用户空间守护程序在启动时利用FUSE将/ dev / fuse挂载到模拟的外部存储目录。
shell") || line.contains("root") || line.contains("acct") || line.contains("misc") || line.contains("obb...卡,如果是otg等挂载方式,可以具体分析并添加判断条件 if (path !...PathList.contains(firstPath)) { PathList.add(firstPath); } return PathList; } 想将Android...当然最要注意的是,你首先需要确定你的sd卡路径或者usb的路径。然后稍微改动代码中的路径就可以让你想放哪里就放哪里了。...卡,如果是otg等挂载方式,可以具体分析并添加判断条件 if (path !
/ 目录 , 将 源码 根目录中的 main.6.com.example.app.obb 文件 , 拷贝到上述目录中 ; 在下图所示的路径 SD 卡下的 Android/obb 目录下创建 com.example.app...---- 文件拷贝前 , 声明 SD 卡权限 ; android="http://schemas.android.com/apk/res/android" package... 访问 SD 卡中的 /sdcard/Android/obb/ 目录 , 可以不用申请 SD 卡 运行时 动态访问权限 ; 在 AndroidManifest.xml...目录中 ; 即 将 /sdcard/Android/obb/com.exapmple.app/main.6.com.example.app.obb 文件 拷贝到 /data/data/com.example.app..."; } /** * 将 obb 文件移动到内置存储中 * 将 /sdcard/Android/obb/com.exapmple.app/main.6.com.example.app.obb
2.读写SD卡时,需要给APP添加读写外部存储设备权限,修改AndroidManifest.xml,添加: android:name="android.permission.READ_EXTERNAL_STORAGE...3.读写SD卡需要用到的Environment类 Environment类是一个提供访问环境变量的类....卡外部的状态,返回的内容可以判断sd卡是否被挂载.比如: //判断if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED..." android:text="SD卡读写内容:" /> <EditText android:id="@+id/et_content" android...SD卡,获取SD卡容量失败"); }else{ File externalStorageDirectory =
100MB , 如果 APK 的大小超过 100MB , 则需要将超出部分放置到扩展文件中 ; 开发者可以将超出部分 , 放在扩展文件中 , 在 Google Play 管理中心 , 每个 APK 文件都可以添加...; obb : obb 是 Opaque Binary Blob 的缩写 ; 不管上传到 Google Play 管理平台 中是什么名称的文件 , 下载下来的文件都会是上述格式的 ; 如 : 当前的...---- 从 Google Play 下载 APK 文件时 , 会同时下载 APK 扩展文件到 /Android/obb// 目录中 , 注意该文件不能删除..., 即使已经下载完了 , 还要重新下载一遍 , 浪费流量 ; 该文件就在这放着不动 ; 是 SD 卡根目录 ; 是应用的包名 ; 下载完之后..., 可以将该文件解压到 内置存储 / SD 卡 中 , 不过这样就会导致一个文件始终占用两份存储空间 ; Google 给出的方案是使用 Google 提供的 APK Expansion Zip Library
: 未挂载就被移除 MEDIA_UNMOUNTABLE : 无法挂载 getExternalStorageDirectory : 获得外部存储(即SD卡)的路径 getExternalStoragePublicDirectory...isExternalStorageRemovable : 判断外部存储是否可以移除,该方法用于判断SD卡是系统自带的还是外部插入的,如是外部插入的该方法就返回true。...但现在很多手机既支持自带SD卡,也支持外插SD卡,所以该方法不能用来鉴别系统有没有外插SD卡。...SD卡操作 app操作SD卡时需增加如下处理: 1、在AndroidManifest.xml中增加SD卡的权限配置 android:name="android.permission.WRITE_EXTERNAL_STORAGE...android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 2、代码中操作SD卡需要先判断当前SD卡是否已挂载。
Android 2.2 可以将手机程序安装在外置的sd卡上,也就是我们平常所说的app2sd。...当然,现在很多第三方ROM都自带了第三方的app2sd,可以将任何程序都安装在sd卡上。 在正式介绍app2sd之前,我先要介绍下android系统的几个比较重要的目录,这是理解后面内容的基础。.../mnt 目录,熟悉linux的人都清楚,linux默认挂载外部设备都会挂到这个目录下面去,如将sd卡挂载上去后,会生成一个/mnt/sdcard 目录。...在Android 2.2之后的版本允许将应用程序安装于SD卡,每一个安装在SD卡的应用程序,都可以在SD卡中的/sdcard/.android_secure 目录里找到名称中有出现它的程序名,和副文件名为...当SD卡挂载于手机时,/mnt/sdcard/.android_secure 目录会被映射到/mnt/asec 目录和 /mnt/secure 目录。
文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 开发时 , 需要向外置 SD 卡中拷贝一些文件 , 应用读取这些文件 , 进行相关配置 ; 但是 Android 系统 , 并不会主动为应用创建文件..., 外置 SD 卡的应用专属外部存储空间目录 , 需要开发者自己创建 ; 当前的包名是 com.example.filepath ; android { defaultConfig {...applicationId "com.example.filepath" } } 在 SD 卡根目录的 Android\data 目录下 , 并没有 com.example.filepath 目录..., 说明 Android 系统并不是自动为每个应用都创建一个应用专属外部存储空间目录 ; 二、解决方案 ---- 在应用中 , 获取 应用专属外部存储空间目录 下的 cache 目录 , 如果没有创建该目录...; 该目录的路径是 /storage/emulated/0/Android/data/com.example.filepath/cache ; /** * 应用专属外部存储空间目录下的
我们意识到某些应用会通过代码或程序库直接访问媒体文件路径。因此,在 Android 11 上,拥有可读取外部存储权限的应用,均可在分区存储环境中通过文件路径访问文件。...针对上述情况,我们增加了 MANAGE_EXTERNAL_STORAGE 权限,允许程序访问外部存储上的所有文件 (除了 Android/data 和 Android/obb 目录)。...目标版本为 Android 11 (API 级别为 30) 并使用 SAF 的应用,将不会被授予某些目录访问权限,例如 SD 卡上的根目录和下载目录。...分区存储中的应用,是否仅限于将文件写入其应用 data 目录上? 在分区存储中,应用可以将 媒体项添加 到媒体存储集合。...针对某些软件包安装程序 (例如应用商店) 需要访问 Android/obb 目录,是否有任何例外情况?
Android官方Api:每个兼容 Android 的设备都支持可用于保存文件的共享“外部存储”。 该存储可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储。...使用外部存储数据需要在应用程序中设置访问SD卡的权限,在AndroidManifest.xml中添加权限 sd卡中创建和删除文件权限--> android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> sd卡写入数据权限--> android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!...), “boreseven”); 下面小提一下两个方法: 1.保存文件到SD卡: //保存文件到SD卡 public void saveToSDCard(String filename,String
Volume.cpp主要负责检查SD卡格式,以及对复合要求的SD卡进行挂载,并通过Socket将消息SD卡挂载的消息传递给NativeDaemonConnector。 5....三、典型流程描述 (SD卡挂载流程) 整个过程从Kernel检测到SD卡插入事件开始,之前的一些硬件中断的触发以及driver的加载这里并不叙述,一直到SD卡挂载消息更新到“Android...Fat::check();SD卡检查方法,检查SD卡是否是FAT格式。 15. Fat::doMount()挂载SD卡。 ...至此,SD的挂载已算初步完成,接下来应该将SD卡挂载后的消息发送给上层,在13中也提到过,在挂载以及检查的过程中其实也有发送消息给上层的。 16. ...(2)引导 Vold进程启动时候会对现有的外部存储设备进行检查。首先加载并解析vold.fstab,并检查挂载点是否已被挂载。然后执行SD卡的挂载,最后处理USB大容量存储。
可选设备(强烈推荐) 尽管从技术的角度来看,你可以将备份存储在 SD 卡上,但不建议这样做。SD 卡的速度较慢,可靠性较低,并且无法长时间处理持续写入。...如果你计划备份到SD 卡,那么估计一年内就会损坏(如果数据量大,甚至一个月内就会出问题)。 带 USB 线的外置 HDD/SSD 大小和写入速度取决于你个人,但我更关心可靠性,而不是存储和速度。...这是你的 SD 卡,你可以留着它(可以在树莓派上工作)。但是,如果没有插入 SD 卡或未正确格式化,则安装将失败。我建议安装到你的内部存储中。我假设你不会使用手机干别的事情,因为它需要一直插着电。...挂载 如果你不担心将来的存储扩展,则挂载外部块设备时只需将其路径直接添加到挂载点。如果以后有扩展存储的打算,则可以考虑逻辑分区。我们在此加载的设备,都可以在启动时直接访问,但不能用于分区和格式化。...如果你挂载的是逻辑卷,则名称不会变化,也不需要检查。 如何找到外部块设备的路径 在 Android 上,你可以通过 “/dev/block/sdX”(而不是 “/dev/sdX”)找到块设备。
02 可选设备(强烈推荐) 尽管从技术的角度来看,你可以将备份存储在 SD 卡上,但不建议这样做。SD 卡的速度较慢,可靠性较低,并且无法长时间处理持续写入。...如果你计划备份到SD 卡,那么估计一年内就会损坏(如果数据量大,甚至一个月内就会出问题)。 带 USB 线的外置 HDD/SSD 大小和写入速度取决于你个人,但我更关心可靠性,而不是存储和速度。...这是你的 SD 卡,你可以留着它(可以在树莓派上工作)。但是,如果没有插入 SD 卡或未正确格式化,则安装将失败。我建议安装到你的内部存储中。我假设你不会使用手机干别的事情,因为它需要一直插着电。...挂载 如果你不担心将来的存储扩展,则挂载外部块设备时只需将其路径直接添加到挂载点。如果以后有扩展存储的打算,则可以考虑逻辑分区。我们在此加载的设备,都可以在启动时直接访问,但不能用于分区和格式化。...如果你挂载的是逻辑卷,则名称不会变化,也不需要检查。 如何找到外部块设备的路径 在 Android 上,你可以通过 “/dev/block/sdX”(而不是 “/dev/sdX”)找到块设备。
4.6.2.3 使用存储在外部存储器如 SD 卡)的文件,应该尽可能最小(必需) 如“4.6.1.4 使用外部存储器(公共读写)文件”中所述,出于安全和功能的考虑,将文件存储在外部存储器(如 SD 卡)...另一方面,与应用目录相比,SD 卡可以处理更大范围的文件,并且这是可以用于将数据带出到应用之外的唯一存储器。 所以,可能有很多情况下必须使用它,取决于应用的规范。...将文件存储在外部存储器中时,考虑到未指定的大量应用和用户可以读/写/删除文件,所以有必要考虑以下各点以及示例代码中提及的要点,来设计应用。 原则上,敏感信息不应保存在外部存储器的文件中。...卸载应用 删除每个应用的数据和缓存(设置=>应用=>选择目标应用) 保存在外部存储器中的文件,如 SD 卡,文件的范围比应用的范围长。 另外,还需要考虑以下情况。...文件由用户删除 取出/替换/取消挂载 SD 卡 文件由恶意软件删除 如上所述,由于文件范围取决于文件的保存位置而有所不同,不仅从保护敏感信息的角度,而且从实现应用的正确行为的角度,有必要选择文件保存位置
在外部存储数据:sd卡 对sdcard进行读取; 基本的状态: MEDIA_UNKNOW:不能够进行识别该sd卡 MEDIA_REMOVE:没有该sd卡 MEDIA_UNMOUNTED...:sd卡有但是并没有进行挂载 MEDIA_CHECKING:sd卡正在准备 MEDIA_MOUNTED:sd卡正在挂载 最简单的打开sd卡的方式 File file = new...File("sdcard/info.txt"); 写sd卡需要权限 android:name="android.permission.WRITE_EXTERNAL_STORAGE..."/> 读sd卡,在4.0之前不需要权限,4.0之后可以设置为需要 android:name="android.permission.READ_EXTERNAL_STORAGE...卡使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 StringBuffer sb = new StringBuffer(); sb.append("<?
但是在后来的设备中,很多中高端机器都将自己的机身存储扩展到了8G以上,他们将存储在概念上分成了"内部internal" 和"外部external" 两部分,但其实都在手机内部。...格式的图片存放到sd卡 public static void saveImage(String path,Bitmap bitmap , int format) throws FileNotFoundException...{ //判断扩展卡是否挂载 if(!...fos.write(data); 62 fos.close(); 63 64 } 65 66 //保存bitmap格式的图片到扩展卡...103 public static void clear(){ 104 //判断扩展卡是否挂载 105 if(!
: 向 SD 卡写出数据 ; android.permission.WRITE_SETTINGS : 写出系统设置 ; android.permission.WRITE_SECURE_SETTINGS...应用获取该权限后 , 可以获取当前系统的环境状态 , 当前设备是否是 root 过的设备 , 是否有其它的威胁 , 如 : selinux 是否被设置成宽容模式 ; selinux 一旦打开强制模式 , 将禁止进程间调试...; android.permission.MOUNT_UNMOUNT_FILESYSTEMS : 挂载 或 卸载 外部文件设备 ; android.permission.ADD_SYSTEM_SERVICE...进入后对应的权限 , 其比 用户权限 所访问的文件范围要大一些 , 但是很多目录都无法访问 ; usr 权限 : 应用权限 , 每个应用都会生成一个 用户 ; 只有 /data/data/包名/ 目录 和 外部...SD 卡的权限 , 没有其它目录的访问权限 ; 跨应用访问数据必须使用特殊手段 ; sdcard_rw 权限 : 只限于 SD 卡目录 , 只有读写权限 , 没有执行权限 ; 该目录的用户虽然属于 root