最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下。在Android 8.0上做了测试。

一般的Android App能读取的存储空间主要有三种:

  1. app自己的私有目录,也就是/data/data/《app 目录》。
    读写这个目录不需要单独的权限。每个app只能读写自己的目录,而不能读写其他app的目录。 Android通过Seandroid对权限进行了管理。
  2. /sdcard。
    这个其实是Android手机的internal storage。 也就是一般你买手机的时候, 说手机是64GB的存储空间,就是说的这个地方。这个地方的读写需要申请权限。READ_EXTERNAL_STORAGE 是读, WRITE_EXTERNAL_STORAGE 是写, 有写的权限就自动有读的权限。 这个权限是正对整个/sdcard,不区分子目录, 也就是说一旦你申请权限你可以对整个/sdcard上的所有文件和目录有操作权限。这个权限的管理会显示再settings里相应的app permission里。
  3. 外置sdcard
    这个对应的是你放入手机sdcard插槽的microSD卡。 有时候也叫removable storage。 Android里无法通过申请权限来获取读写的权利。 这一点和上面说的2不同。 因此,如果需要获取写权限, 需要用户指定特定的目录单独授权。这里举个简单的例子。 如果外置sdcard的路径是/mnt/extsdcard,然后上面有两个目录a和b, 那么你可以让用户授权你写/mnt/extsdcard/a, 但是你还需要让用户再单独授权你写/mnt/extsdcard/b, 也就是要授权两次。 具体的实现方法, 就不多说了, google再github上给了个例子, 其中的wiki页面有比较详细的描述。

    特别要说明的是, 由于这个没有对应的android permission, 所以如果你得到授权以后, 对应的目录路径不会显示再settings中的app permission。 相反, 它会显示再app storage里,用户可以在那里revoke对app的授权(同样, 也是指定目录)。这个我感觉其实不好, 因为这本质上也是权限问题, 应该都放在app permission里。

Android 8.0 中如何读取内部和外部存储以及外置SDcard相关推荐

  1. Android 7.0中的多窗口-分屏-实现解析

    禁用APK分屏-AndroidManifest.xml添加属性:android:resizeableActivity="false" Android 7.0中的多窗口实现解析 标签 ...

  2. Android 8.0学习(31)---Android 8.0 中的 ART 功能改进

    Android 8.0 中的 ART 功能改进 在 Android 8.0 版本中,Android Runtime (ART) 有了极大改进.下面的列表总结了设备制造商可以在 ART 中获得的增强功能 ...

  3. Android 5.0中的FDE功能实现

    标 题:  [分享]Android 5.0中的FDE功能实现 作 者: netsniffer 时 间: 2015-01-27,21:15:06 链 接: http://bbs.pediy.com/sh ...

  4. linux 电源管理 唤醒,Android 4.0 中的PowerManager(电源管理--休眠唤醒) [转]

    转发请注明出处: 最近,在学习让系统进入休眠的过程中,学习了电源管理的相关知识.为了备忘和理清思路现整理成文,以便日后查阅. 移动设备由于自身的限制有一个硬伤就是电量的消耗问题.由于电池的电量有限,所 ...

  5. Android studio 提示‘adb‘ 不是内部或外部命令,也不是可运行的程序的解决方法

    Android studio 提示'adb' 不是内部或外部命令,也不是可运行的程序的解决方法 在打开Android studio 命令行时,有时候会提示 'adb' 不是内部或外部命令,也不是可运行 ...

  6. Android Studio3.0中dependencies依赖由compile变为implementation的区别

    前言 Android Studio版本更新至3.0了,更新后,连带着com.android.tools.build:gradle 工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde 4. ...

  7. as3 android白屏,Android 8.0中一些坑以及对应的解决方法

    前言 虽然 Android 9.0 都已经面世了,本篇文章写的有点迟了. 但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的 Android 8.0 的坑及对应解决方法. 每次系统升级,虽然系统 ...

  8. android 7.0 裁剪,Android 7.0中拍照和图片裁剪适配的问题详解

    前言 Android 7.0系统发布后,拿到能升级的nexus 6P,就开始了7.0的适配.发现在Android 7.0以上,在相机拍照和图片裁剪上,可能会碰到以下一些错误: Process: com ...

  9. android studio内置终端,Android Studio Terminal xx不是内部或者外部命令

    背景 在使用AS工具自带命令面板Terminal的时候,相信你有碰到过:xx不是内部或者外部命令,也不是可运行程序.解决办法就是配置环境变量 一.在 Terminal 中使用 adb,报 'adb' ...

最新文章

  1. 互联网之父公开拍卖万维网源代码,3400万买下后发现居然有bug
  2. tcp为什么比udp慢_TCP和UDP那些事儿
  3. vue项目中 axios请求拦截器与取消pending请求功能 - 年少、 - 博客园
  4. Spring Boot 最佳实践
  5. 21天战拖记——Day6:复习阶段性完成!(2014-05-09)
  6. AI: 2021 年人工智能前沿科技报告(更新中……)
  7. [渝粤教育] 西南科技大学 机械设计基础 在线考试复习资料
  8. 在和弦上进行旋律创作(不断更新)
  9. linux 用户配额设置,Linux如何设置磁盘配额
  10. java工控_用java做工控的大神进
  11. mac字体能用在linux吗,mac的字体和win通用吗
  12. 短视频app源码开发,音视频合成的实现
  13. 计算机主板会自动切断电源是怎么回事,告诉你电脑自动断电怎么办
  14. (转)世界上最美丽的英文
  15. Win7高级应用技巧
  16. 使用微信小程序拨打电话
  17. Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...
  18. 自动驾驶需要哪些关键技术?
  19. 从皮亚诺公理体系到1+1=2的严格证明(一)
  20. libcef-简单介绍-快速链接-源代码发布

热门文章

  1. 线程同步-AutoResetEvent
  2. Linux中的SELinux与chcon以及Samba实现【转】
  3. DataList的e.Item.ItemType == ListItemType.Item判断问题
  4. Android深入浅出之Binder机制
  5. Python学习笔记:高级特性
  6. 详解进程的虚拟内存,物理内存,共享内存
  7. 【Python】matplotlib.pyplot 标题换行
  8. [云炬python3玩转机器学习]6-3线性回归中的梯度下降法
  9. 骁龙845_骁龙845为什么这么快就不受欢迎了?手机更新节奏有多快
  10. Delphi编码规范