Android 8.0 中如何读取内部和外部存储以及外置SDcard
最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下。在Android 8.0上做了测试。
一般的Android App能读取的存储空间主要有三种:
- app自己的私有目录,也就是/data/data/《app 目录》。
读写这个目录不需要单独的权限。每个app只能读写自己的目录,而不能读写其他app的目录。 Android通过Seandroid对权限进行了管理。 - /sdcard。
这个其实是Android手机的internal storage。 也就是一般你买手机的时候, 说手机是64GB的存储空间,就是说的这个地方。这个地方的读写需要申请权限。READ_EXTERNAL_STORAGE 是读, WRITE_EXTERNAL_STORAGE 是写, 有写的权限就自动有读的权限。 这个权限是正对整个/sdcard,不区分子目录, 也就是说一旦你申请权限你可以对整个/sdcard上的所有文件和目录有操作权限。这个权限的管理会显示再settings里相应的app permission里。 - 外置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相关推荐
- Android 7.0中的多窗口-分屏-实现解析
禁用APK分屏-AndroidManifest.xml添加属性:android:resizeableActivity="false" Android 7.0中的多窗口实现解析 标签 ...
- Android 8.0学习(31)---Android 8.0 中的 ART 功能改进
Android 8.0 中的 ART 功能改进 在 Android 8.0 版本中,Android Runtime (ART) 有了极大改进.下面的列表总结了设备制造商可以在 ART 中获得的增强功能 ...
- Android 5.0中的FDE功能实现
标 题: [分享]Android 5.0中的FDE功能实现 作 者: netsniffer 时 间: 2015-01-27,21:15:06 链 接: http://bbs.pediy.com/sh ...
- linux 电源管理 唤醒,Android 4.0 中的PowerManager(电源管理--休眠唤醒) [转]
转发请注明出处: 最近,在学习让系统进入休眠的过程中,学习了电源管理的相关知识.为了备忘和理清思路现整理成文,以便日后查阅. 移动设备由于自身的限制有一个硬伤就是电量的消耗问题.由于电池的电量有限,所 ...
- Android studio 提示‘adb‘ 不是内部或外部命令,也不是可运行的程序的解决方法
Android studio 提示'adb' 不是内部或外部命令,也不是可运行的程序的解决方法 在打开Android studio 命令行时,有时候会提示 'adb' 不是内部或外部命令,也不是可运行 ...
- Android Studio3.0中dependencies依赖由compile变为implementation的区别
前言 Android Studio版本更新至3.0了,更新后,连带着com.android.tools.build:gradle 工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde 4. ...
- as3 android白屏,Android 8.0中一些坑以及对应的解决方法
前言 虽然 Android 9.0 都已经面世了,本篇文章写的有点迟了. 但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的 Android 8.0 的坑及对应解决方法. 每次系统升级,虽然系统 ...
- android 7.0 裁剪,Android 7.0中拍照和图片裁剪适配的问题详解
前言 Android 7.0系统发布后,拿到能升级的nexus 6P,就开始了7.0的适配.发现在Android 7.0以上,在相机拍照和图片裁剪上,可能会碰到以下一些错误: Process: com ...
- android studio内置终端,Android Studio Terminal xx不是内部或者外部命令
背景 在使用AS工具自带命令面板Terminal的时候,相信你有碰到过:xx不是内部或者外部命令,也不是可运行程序.解决办法就是配置环境变量 一.在 Terminal 中使用 adb,报 'adb' ...
最新文章
- 互联网之父公开拍卖万维网源代码,3400万买下后发现居然有bug
- tcp为什么比udp慢_TCP和UDP那些事儿
- vue项目中 axios请求拦截器与取消pending请求功能 - 年少、 - 博客园
- Spring Boot 最佳实践
- 21天战拖记——Day6:复习阶段性完成!(2014-05-09)
- AI: 2021 年人工智能前沿科技报告(更新中……)
- [渝粤教育] 西南科技大学 机械设计基础 在线考试复习资料
- 在和弦上进行旋律创作(不断更新)
- linux 用户配额设置,Linux如何设置磁盘配额
- java工控_用java做工控的大神进
- mac字体能用在linux吗,mac的字体和win通用吗
- 短视频app源码开发,音视频合成的实现
- 计算机主板会自动切断电源是怎么回事,告诉你电脑自动断电怎么办
- (转)世界上最美丽的英文
- Win7高级应用技巧
- 使用微信小程序拨打电话
- Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...
- 自动驾驶需要哪些关键技术?
- 从皮亚诺公理体系到1+1=2的严格证明(一)
- libcef-简单介绍-快速链接-源代码发布
热门文章
- 线程同步-AutoResetEvent
- Linux中的SELinux与chcon以及Samba实现【转】
- DataList的e.Item.ItemType == ListItemType.Item判断问题
- Android深入浅出之Binder机制
- Python学习笔记:高级特性
- 详解进程的虚拟内存,物理内存,共享内存
- 【Python】matplotlib.pyplot 标题换行
- [云炬python3玩转机器学习]6-3线性回归中的梯度下降法
- 骁龙845_骁龙845为什么这么快就不受欢迎了?手机更新节奏有多快
- Delphi编码规范