A. 荣耀手机移动文件时无法获取外部存储器读写权限
这是没有授权的原因。
具体操作步骤如下:打开手机点击一下【设置】,进入设置页面打开【应用】,打开后点击一下【权限管理】,打开权限管理页面点击一下【权限】,进入权限设置页面选择【存储】,在这里就可以设置各个应用到存储权限了。
外部储存器就相当于以前的内存卡一样,现在一般很少用到了。
B. 外置存储权限是什么意思
品牌型号:华为p50系统:HarmonyOS 3
外置存储权限是部分旧版安卓手机的功能,需要开启这个功能才能把应用安装到SD卡上。外置储存也就是移动存储指便携式的数据存储装置,指带有存储介质且(一般)自身具有读写介质的功能,不需要或很少需要其他装置(例如计算机)等的协助。现代的移动存储主要有移动硬盘、USB盘和各种记忆卡。
常见的外部存储器有硬盘、优盘、光盘等;外部存储器所存储的数据资料,断电后不会丢失,常用于数据备份、数据拷贝、数据存储(文件和程序)。外部存储器的特点是储存容量大、价格低廉,但是存取数据慢。
1、硬盘。常见的硬盘种类有机械硬盘(HDD)和固态硬盘(SSD)。
2、机械硬盘。机械硬盘由盘片、磁头、控制电机、盘片转轴、磁头控制器、数据转换器等组成。常见的机械硬盘有3.5寸和2.5寸之分,2.5寸硬盘常用于笔记本等便携式电脑、小型机箱等, 3.5寸硬盘常用于台式机、服务器;机械硬盘的特点是存储容量大,价格低,但是数据存取慢,占用空间大,发热量较大,比SSD的噪音也大。
3、NVME固态硬盘。固态硬盘由电子存储芯片阵列组成,即存储单元和控制单元,其中存储单元有FLASH芯片、DRAM芯片等类型。其特点是存储速度快,但是价格较机械硬盘来说高出许多。
4、优盘。优盘,亦称U盘,闪存盘,是较为常见的可移动式存储设备;其价格相对低廉,存取速度快,占用空间小,USB接口即插即用,常用于桌面PC之间的文件互相传输。
5、光盘。分为CD光盘和DVD光盘,同时也包含可擦写和不可擦写光盘之分。光盘由基板、记录层、反射层、保护层、印刷层组成。需要用专门的光盘驱动设备(光驱)来读取或者刻录数据。光盘常用于数据备份,资料存储,程序存放(WINDOWS安装光盘,程序光盘等)。
6、软盘。常见的软盘有1.44M,3.5寸英寸软盘。它是最早使用的可移动存储介质。需要通过软盘驱动来使用。其特点为其存储容量小,读取速度慢,已被U盘、可移动硬盘取代。
7、磁带。被称为磁表面存储器(磁表面存储设备);由磁带传送机构、伺服控制电路、读写磁头、读写电路和有关逻辑控制电路等组成。其特点为储容量大、价格低廉、携带方便。
C. 安卓内外部存储完全解析 -- 别再弄混了
安卓开发离不开手机存储,然而大部分人对于安卓开发中的存储概念存在误区,内部外部SD卡傻傻分不清?
以下引用来自对 官方文档 的理解
呵呵呵,先别说话,然而重点来了(敲黑板),按照官方的说法,
内部存储是指系统的存储空间,没有root是访问不到的呦亲,比如sharedPreferenced或者database都是保存在这里面的。
外部存储,又分为 2 部分:
然而现实中,常常有同事把手机那个32G,64G存储叫做内部存储= =,宝宝好累,人家明明是 ExternalStorage !!
希望本篇能让大家对内外部存储有一个正确鲜明的认识
getFilesDir()
路径如下
文档 云:若想操作该路径,你需要一个输出流:
就像这样:
注: this 是 context 对象
在
路径下会看到新文件哦
如果你还想读取的话, 文档 云:你需要一个输入流:
Log如下
getCacheDir()
文档 云:
路径如下:
特别的,还有getDir() :
getDir("- -!.txt", Context.MODE_PRIVATE).getAbsolutePath()
路径如下:
app_是系统自己加上去的
内部存储就是系统的存储,没有root你是看不到的,内部存储最大特点就是可以用Context对象调用各个获取路径的方法。比如: context.fileList()
那就是
下的文件遍历。
而 deleteFile("ABC") 就是
删除下名为 ABC 的文件
</br></br></br>
操作外部存储你首先需要以下权限
当你申请了write权限,那么read权限默认也就通过啦
再判断状态:
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState))
Environment.getExternalStorageDirectory()
这个路径根据手机厂家不同会有些许变化
直接传入 Environment 中的常量获取相应的路径,如下:
Environment.(Environment.DIRECTORY_ALARMS));
或者
Environment.(Environment.DIRECTORY_PICTURES));
公有目录下,系统会区分不同类别 (例如铃声在系统设置中显示为铃声而不是音乐)
4.4以后访问该目录不再需要权限了
getExternalFilesDir(String type)
eg.
getExternalFilesDir(Environment.DIRECTORY_MUSIC)
特别的:ContextCompat下的
ContextCompat.getExternalFilesDirs(context,type)
返回一个File[],在4.4以后第一条数据默认外部主存储目录,第二条数据就是sd卡路径啦,但是注意4.4之前是没有第二条数据的哦
该目录下的特点是卸载程序后,该目录和其下所有文件均会被删除
getExternalCacheDir()
注意,使用该目录注意管理空间,你不能等系统帮你清理,而是自己清理不再需要的缓存
特别的:ContextCompat下的
ContextCompat.getExternalCacheDirs()
道理同上
发现特点了吗朋友,无论外部内部,只有路径中有包名,那么就是私有的,而且是随着程序的卸载而被删除的, 有包名的路径均是Context中的方法,而公有的路径均是Environment调用的
这个货真真是要了老命,一般的方法根部不好使,结合网上有的方法加上公司项目中的方法,总结如下:
百分百好用的获取SD卡路径方法:
最后集合 path 中的值就是SD卡根目录
虽然无视版本百分百好用,但是如果你的手机有SD卡槽却没插SD卡,该方法最后 path 返回的是 null ,也就是说该方法无法判断到底是没插SD卡还是根本不支持SD卡
其实还有一种方法
String path = System.getenv("SECONDARY_STORAGE");
该方法只要你手机支持SD卡,无论你插没插SD卡,均会返回SD卡路径,但是 6.0及以上该方法被移除
Environment中源码其实就是根据这个方法获取路径的
安卓官方文档大家一定要看,他就是我们开发者的权威呀,圣经呀!!
D. Android 内部存储/外部存储 及 读写权限
Android 使用 VFS (Virtual File System) 虚拟文件系统。VFS提供了供存储设备挂载的节点,同一存储设备经过分区后,不同的分区可以挂载到不同的节点上,如手机的内置存储卡。
内置存储卡 / 外置SD卡
内部存储 / 外部存储
VFS 的目录以 / 为根节点,根节点下面又有不同的节点。物理存储设备就是挂载到这些节点上。
内部存储卡/外置SD卡 ≠ 内部存储/外部存储
首先明确, 内置存储卡/外置SD卡 是在 物理层面 相对于 手机大众用户 来说的。
外置SD卡:可手动插拔的SD卡。
内置存储卡:焊接在手机内部不可拆卸的存储卡。
而, 内部存 /外部存储 是在 文件系统逻辑层面 相对于 开发者 来说的,指具体的路径。
一般针对某个应用而言的,属于该应用的存储路径叫内部存储,反之为外部存储。
路径: /data/data/package_name
/data/data/ 下都是已安装应用的目录,该目录下包含的文件都是以包名作为文件名的目录,例如 /data/data/com.sankuai.meituan
获取内部存储的方式如下:
其中,参数 mode 指创建模式,一种 4 种
注意: Android 7.0 以上 android.os.Build.VERSION.SDK_INT>=Build.VERSION_CODES.N 使用3/4 常量时,将会导致SecurityException,这意味着 不能通过名称共享私有文件 。
尝试共享 file://URI URI将会导致FileUriExposedException,StrictMode API政策禁止在您的应用外部公开file://URL。如果您的应用需要与其他应用共享私有文件,则可以使用 FileProvider 与 FLAG_GRANT_READ_URI_PERMISSION 配合使用。 Android 7.0 行为变更 通过FileProvider在应用间共享文件吧
外部存储,可以是 外置SD卡 或 内置存储卡的部分分区。
外部存储,分为 公共目录 和 私有目录
获取方式
检查可用性的方法:
Android 4.3 以下,只能通过 Context#getExternalFilesDir(type) 来获取外部存储在内置存储卡分区的私有目录,无法获取外置SD卡。
Android 4.3 开始,可以通过 Context#getExternalFilesDirs(type) 获取一个File数组,包含了内置存储卡分区和外置SD的私有目录地址。
可以使用兼容库的静态方法 ContextCompate.getExternalFilesDirs() 兼容 4.3。
感谢以下文章作者
解析Android内部存储、外部存储的区别
E. Android 添加读写外部存储权限
1 静态修改: AndroidManifest中添加SD卡读写的权限
2 动态修改:java判断并获取权限
F. 怎么允许外部储存权限 储存空间权限怎么开启
1、手机安装ROOT。
2、打开软件,选择一键ROOT就可以了。
3、设置默认存储位置。
4、打开设置,选择存储,选择默认存储位置,设置到需要的位置。
5、打开需要设置的软件,会自动弹出权限提示设置,选择就OK。
6、打开权限设置软件,设置允许设置或修改存储位置就可以了。
G. 相册外置存储权限在哪里找
这里分享下相册外置存储权限设置的方法。
设备:华为mate30
系统:安卓4.5
1、首先打开手机点击设置选项。
H. 从相册选择需要读取外置存储权
这个权限要求属于正常范围。如果一个软件需要从相册内读取照片,确实是需要存储权限。
如果软件没有存储权限,就无法访问你的存储器读取出照片(文件),如果你担心隐私问题,可以在软件读取照片后,再关闭这个权限即可。