-
2021-12-27 18:35:19
4 存储管理
Android存储分为内部存储和外部存储。前者不需要权限,后者需要权限。内部存储又可划分为共享存储(也称共享偏好)、内部文件读写和SQLite数据库存储。Android提供了共享存储接口SharedPreferences 。Activity具有获取SharedPreferences接口类型对象的方法getPreferences()(本方法由Activity的超类Context类提供)。
4.1 使用SharedPreferences存储数据
SharedPreferences是Android系统提供的一个存储少量数据的轻量级数据存储方式,类似于Cookie,经常用它来保存一些常用的信息。SharedPreferences对象采用键值对的形式组织和管理数据,其数据存储在XML格式文件中。4.2 文件存储
文件存储是Android中最基本的一种数据存储方式,和Java类似,都是通过I/O流的形式把数据直接存储到文档中,不同的是Android中的文件存储分为内部存储和外部存储。4.3 SQLite数据库存储数据
SQLite是一个关系型数据库,是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且非常小,所以常作为嵌入式数据数据库内置在应用程序中。另外,它还是开源的,所有人都可以使用它。4.4 使用ContentProvider存储
Android系统通过Content Provider来管理数据,如音频、视频、图像、个人联系信息等。可以说Content Provider也是一个应用程序数据的集合,方便其他的应用访问其中的应用程序数据,这些数据可以被存在文件系统中,SQLite数据库中,或者其他可以存数据的地方。另外,Contentproviders同时还是一个基本的方法集合,来使其他的应用可以获得和存储这些数据。一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。更多相关内容 -
【Android 文件管理】分区存储 ( MediaStore 文件操作 )
2021-05-18 12:53:16【Android 文件管理】分区存储 ( MediaStore 文件操作 ) https://hanshuliang.blog.csdn.net/article/details/116948386 博客源码 -
安卓SD卡文件管理更新信息相关-android读取外置和内置存储卡路径和大小.rar
2019-07-29 16:22:09android 读取外置和内置存储卡路径和大小.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
Android-存储路径与管理应用文件存储方法汇总
2021-01-03 19:02:07Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间,外部存储指外插SD卡提供的存储空间;随着手机发展,这两个存储的定义又有了一些些变化,新的手机不再有外插SD卡的概念,... -
【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )
2021-05-17 18:21:32一、Android 10 以前的存储机制、 二、Android 10 及以后的分区存储机制、 三、Android 10 中的存储过渡方案、 四、文件索引数据库、 五、相关文档资料、
一、Android 10 以前的存储机制
Android 10 10 10 之前的文件系统 , 内存分为两块 , 应用私有目录 , 和 共享存储空间 ;
私有目录 : 只能保存本应用的数据 , 其它应用无法读写该目录中的数据 , 应用卸载时 , 该目录自动删除 ;
共享存储空间 : 所有的应用都可以随意访问 , 随意读写该区域内的数据 , 数据可以任意放置 , 删除 , 修改 ; 应用卸载时写出到该区域的数据不会被删除 ;
任何目录可以存储任何类型文件 , 可以将图片存储到 Movies , 视频存储到 Music 目录中 ;
共享存储空间 绝对是个 天坑 , 能不用尽量不用 ;
二、Android 10 及以后的分区存储机制
Android 10 10 10 及以后的文件系统 :
私有目录 : 与之前保持一致 , 只能保存本应用的数据 , 其它应用无法读写该目录中的数据 , 应用卸载时 , 该目录自动删除 ;
共享存储空间 : Google 官方对该存储区域进行了统一规划 , Android 11 11 11 中 , 每个目录存储什么类型的文件 , 都有相应规范 , 文件不能乱放置 ;
文件存储类型限制 : 文件一旦放错位置 , 就会抛异常 ;
-
专门存储 图片文件 的目录 Pictures , 只能存放图片 , 不能存放其它类型文件 ,
-
专门存储 视频文件 的目录 Movies , 只能存视频文件 ;
-
专门存储音频文件的目录 Music , 只能存储音频文件 ;
-
专门存储文档文件的目录 Document , 只能存储文档相关文件 ;
-
Download 目录可以放置任何类型的文件 ;
三、Android 10 中的存储过渡方案
Android 10 10 10 版本是过渡版本 , 在该版本中可以选择启用分区存储 , 也可以选择不用 , 在清单文件的 application 节点设置 requestLegacyExternalStorage=“true” 属性可以设置 不启用 分区存储 方案 , 但是 在 Android 11 11 11 中 必须 启用分区存储 , 否则应用不能兼容 Android 11 11 11 系统 ;
Android 10 10 10(API 级别 29 29 29)及之前的系统版本 , 操作文件时 , 使用的 File 类 , 该类只支持传统的存储方式 , 不支持分区存储 ;
Android 11 11 11(API 级别 30 30 30)中不能使用 File 进行文件操作 , 只能使用 MediaStore 进行文件操作 ;
参考文档 - 暂时停用分区存储 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage
四、文件索引数据库
Android 11 11 11(API 级别 30 30 30) 之后的存储机制 : Android 中所有文件存储 , 都会将文件的索引存储在数据库中 , 在 /data/data/com.android.providers.media 目录下的文件就是专门用于管理该数据库的 ;
在 /data/data/com.android.providers.media 目录下有 4 4 4 个目录 , cache , code_cache , databases , shared_prefs , 其中 databases 就是存储的上述文件索引数据库 , 有两个数据库文件 : external.db , internal.db ;
查看命令 :
walleye:/ # cd /data/data/com.android.providers.media walleye:/data/data/com.android.providers.media # ls cache code_cache databases shared_prefs walleye:/data/data/com.android.providers.media # cd databases walleye:/data/data/com.android.providers.media/databases # ls external.db internal.db walleye:/data/data/com.android.providers.media/databases #
将 external.db 数据库拷贝出来 , 使用 SQLite 查看工具查看该数据库 , 该数据库中有一张 files 数据表 , 就是存放文件索引的 , 只有开启分区存储时 , 才将所有的文件都保存在该数据库表中 ;
生成文件索引 :
-
在老版本的文件系统中 , 只有将文件放在 Pictures , Movies , Music , Document 等目录下时 , 才生文件索引放在数据库中 , 在 SD 卡其它位置创建文件 , 不会生成文件索引 ;
-
在新版本的分区存储中 , 上述数据表中管理所有 SD 卡上的文件 , 所有的文件和目录都会显示在上述数据库中 ;
external.db 数据库 files 数据表字段简介 :
-
_id : 每个文件都会被赋予一个 id , 不会重复 ;
-
tittle : 文件名称 , 一般是文件的完整名称去掉文件后缀 ;
-
_display_name : 文件的完整名称 , 带后缀 ;
-
mime_type : 文件的 MIME 类型 ;
五、相关文档资料
Android 文件处理参考文档 :
-
数据和文件存储概览 : https://developer.android.google.cn/training/data-storage
-
访问应用专属文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin
-
保存到共享的存储空间 : https://developer.android.google.cn/training/data-storage/shared
-
管理存储设备上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files
-
分享文件 : https://developer.android.google.cn/training/secure-file-sharing
-
应用安装位置 : https://developer.android.google.cn/guide/topics/data/install-location
-
Android 存储用例和最佳做法 : https://developer.android.google.cn/training/data-storage/use-cases
-
FileProvider : https://developer.android.google.cn/reference/androidx/core/content/FileProvider
-
-
Android 仓库管理系统源码
2016-05-27 17:46:01Android 仓库管理系统源码加报告 -
Android 安卓管理日志,所有输出日志保存本地
2017-05-25 09:57:56便于开发,测试,定位问题。方便查看日志。所有日志保存本地文件,可按日志等级保存,定期删除,文件最长可保存自定义天数,代码中写的3天时间,天 日志文件将会删除。 -
Android应用源码可以管理U盘的文件管理器.zip
2019-07-10 19:55:57本项目是一个可以简单的文件管理器项目源码,不过不是只管理sd卡,比如U盘之类的手机外挂的存储设备也可以进行文件管理,并且可以简单的读取文本文件的内容并显示。项目编译版本2.3.3默认编码GBK -
安卓实训 学生信息管理
2019-06-25 12:43:19这是我给舍友写的安卓实训的模板。适合上课没怎么听,实训案例零基础上手。是一个学生信息管理,当然你们也可以改成账户信息管理等等。如果你导入eclipse出错可能是版本不兼容等问题,可以试着把.settings文件夹删掉... -
安卓人事管理系统
2021-03-17 23:30:39安卓人事管理系统源码是一个简单的安卓版人事管理学生作品源码,包括职工信息的管理、个人工资信息的管理、部门管理和一个综合的查询功能,所有的信息都是储存在手机上的SQLite中,如果想让其可以联网真正的使用可以... -
Android四种数据存储的应用方式
2021-01-20 10:21:53Android四种数据存储的应用方式 作为一个完整的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、文件存储、SQLite、 Content Provider。对这几种... -
详解Android10的分区存储机制(Scoped Storage)适配教程
2021-01-20 08:35:04因为Google的缺席,导致Android生态野蛮生长,导致很多开发规范没有完全被落实。 为了解决这样的问题,Google决定重拳出击,提出了分区存储(Scoped Storage)机制,也叫沙盒存储机制。 那么什么是沙盒存储机制呢。 ... -
androidStudio--基于SQLite数据库的学生信息管理系统
2020-01-17 12:53:21这是基于android开发的学生信息管理系统,包括学生的增加、删除、查询、修改、详细信息查看;除此之外,该系统应用到了手机内置的sqlite数据库来进行数据的存储,所以,是学生学习android的一次不错的选择,应用工具... -
浅析Android文件管理器(项目一)
2021-01-20 09:10:00文件管理器是管理文件的软件,帮助用户处理日常工作,管理储存在本地和网络中的文件。所有文件管理器都提供了基本的操作如创建、打开、查看、编辑、移动和删除文件。许多Android文件管理器还提供了额外功能,如网络... -
Android 包管理服务
2021-05-28 06:55:24PackageManagerService(PmS)包管理服务运行在SystemServer进程中,是一个安卓系统服务,主要用于实现应用安装卸载,组件查询匹配,权限管理等功能。主要功能根据Intent匹配到具体的Activity,Provider,Service,即...PackageManagerService(PmS)包管理服务运行在SystemServer进程中,是一个安卓系统服务,主要用于实现应用安装卸载,组件查询匹配,权限管理等功能。
主要功能
根据Intent匹配到具体的Activity,Provider,Service,即当应用程序调用startActivity(intent)方法时,能够把Intent转换成一个具体的包含程序名称及Component的信息,以便类加载器加载具体的Component。
权限检查,当应用程序调用某个需要特定权限的接口时,判断调用者是否有该权限
提供安装删除应用程序的接口
实现原理
应用安装时读取应用程序AndroidManifest.xml中的标签比如,request-feature、permission并将其保存在指定目录文件下,PmS在启动时会读取这些xml文件建立起一个包信息树,应用程序可以间接的从信息树种查到所需要的程序包信息。
两个目录
1./data/system/package.xml文件记录系统中所有应用程序包管理相关信息,比如程序包名称是什么,安装包路径在哪里,程序都使用了哪些权限,等等。
2./system/etc/permissions/文件夹下保存的xml文件用于应用程序权限管理。
PmS在启动时会读取这两个文件来构建应用程序包信息树。PmS读取的数据会存在其内部类变量中。
数据结构
PmS的内部类Settings基本上包含了包管理所需要的全部信息,该类主要包含几类变量:
包属性信息,包括packages.xml配置文件,配置文件备份,应用程序列表文件,包管理信息。
用户Id相关信息,所有用户Id共享Id等,
权限管理相关信息,保存所有的签名,所有的权限。
删除信息,应用程序被卸载后,如果该程序的数据保存在外部存储空间中,则其数据目录默认不被删除。
以上信息,均是从packages.xml配置文件中解析而来。
PmS类中还包括以下重要数据:
扫描应用程序目录得到的程序包信息
系统所有权限名称
系统所依赖的共享Java库
从应用程序AndroidManifest.xml中解析出来的Activity,Service,BroadcastReceiver列表
PmS在启动时会遍历应用程序目录下的所有程序,并从AndroidManifest.xml中提取出Intent-filter数据并将其保存在一个列表中,用于进行Intent-filter(startXXX(intent))匹配。
关键方法
1.readPermission()
从/system/etc/permissions/目录下读取系统中定义的所有feature列表,给系统一些native分配权限信息。
2.mSettings.readLP()
从packages.xml中读取所有安装包信息。其中会涉及到package-backup.xml文件的处理。packages.xml中使用各种各样的标签存储应用程序信息。
3.mSettings.writeLP()
应用程序包扫描已经应用程序安装。应用程序安装分为两步,第一是把原始APK复制到相应程序目录下,第二则是为应用程序创建相应的数据目录及提取dex文件,并修改系统包管理信息等。mSettings.writeLP()主要完成第二步。
4.scanPackageLI()
将mSettings.mPackages的数据写到packages.xml和packages.list文件中。
创建PmS
SystemServer启动时,PmS在从其静态main函数中创建,并将自己添加到系统服务中:
public static final IPackageManager main(Context context,boolean factoryTest){
PackageManagerService m = new PackageManagerService();
SystemManager.addService("package",m);
return m;
}
启动PmS
创建PmS.Settings数据对象并赋值
创建Installer对象,该对象主要用于辅佐应用程序安装
为几个静态数据文件路径变量赋值
调用readPermission()方法从/system/etc/permissions目录下读取并解析全部XML文件
调用mSettings.readLP()方法从/data/system/packages.xml文件中读取应用程序包管理相关信息。
提取或者转换Java系统库中的dex文件
为/system/framwworks,/system/app,/vendor/app目录添加FileObserver,FileObserver用于检测目录天剑删除的问价事件。
调用scanDieLP()扫描上述三个目录中的所有应用程序,并将扫描结果保存到PmS的mPackages变量中。
删除已经不存在的应用程序对应的数据记录
清除没有安装成功的数据记录
为/data/app添加FileObserver
检测是否系统升级,如果升过则重新为应用程序设置权限
将mSettings.mPackages中的数据从新写入packages.xml中
获取PmS
通过ContextImpl.getPackageManager()返回一个PackageManager对象,然后就可以调用改对象提供的各种API接口。
getPackageManager内部获取过程和getSystemService的过程基本相似,都是通过ServiceManager获取指定名称的IBinder对象进而获取PmS服务。(普通服务通过context.getSystemService("serviceName")获取)
-
【Android 文件管理】分区存储 ( 修改与删除图片文件 )
2021-05-21 15:18:14【Android 文件管理】分区存储 ( 修改与删除图片文件 ) https://hanshuliang.blog.csdn.net/article/details/117116388 博客源码快照 -
华为储存空间管理器可以删除吗_Cx File Explorer 免费清爽无广告的安卓手机文件管理器 (支持局域网共享/FTP...
2020-10-20 23:40:26在Android手机上,「文件管理器」是不可划缺的必备工具,但像小米、华为等多数手机自带的管理器都不支持全部的局域网共享 (Samba / SMB)、FTP、WebDAV 等远程连接。而像ES 文件浏览器、Solid Explorer等大多数更专业...在 Android 手机上,「文件管理器」是不可划缺的必备工具,但像小米、华为等多数手机自带的管理器都不支持全部的局域网共享 (Samba / SMB)、FTP、WebDAV 等远程连接。
而像 ES 文件浏览器、Solid Explorer 等大多数更专业强大的文件管理器 APP 不是收费,就是有不少烦人的广告。其实,在安卓上还有比较冷门,但相当值得推荐的好用的文件管理器,比如 Cx File Explorer!它完全免费、无广告,且支持远程文件管理和各种云网盘连接……
免费清爽无广告支持远程访问的文件管理器 APP
Cx File Explorer 是 Android 平台上一款非常简洁好用的免费安卓文件管理器 APP 应用。它最大的特点就是完全免费、界面干净无广告,而且还能支持各种常见的远程文件管理!你可以用它来轻松访问和管理手机本地、局域网电脑、NAS、远程服务器以及云存储网盘上的文件。
在文件管理的功能上,Cx File Explorer 基本能满足所有的文件操作需求:浏览、移动、复制、压缩、重命名、提取、删除、搜索、存储空间分析等等都一应俱全。虽然称不上多么的“强大专业”,但也不见得会输于同类的付费工具。
加上 CX 文件管理器 的软件界面干净整洁不花哨,看起来和用起来都特别的舒服,功能实用又不臃肿,体积仅 4.5 MB,绝对是那些不能支持远程连接的系统原生自带文件管理器的有效补充。
Cx File Explorer 文件管理器可以支持连接到各种常见的局域网共享电脑 (SMB),支持 FTP、FTPS、SFTP、WebDAV 等远程服务器;同时,也可以支持 OneDrive、Dropbox、Google Drive、Box 等主流的网盘文件管理。
另外,CX 文件管理器也支持在手机上建立 FTP 服务,你可以反向地「从电脑端或其他设备上」访问手机里的文件。只需在同一局域网里,通过浏览器或者 FTP 客户端,连接 Cx 给出 IP 地址即可,这样电脑和手机之间互相传输文件都是很方便的。
Cx File Explorer 档案主管的主要特色
访问云存储上的文件:你可以用 Cx 来上传/下载/修改云存储网盘上的文件。
访问 NAS、PC 上的文件:你可以访问远程或局域网共享的文件,如 FTP、FTPS、SFTP、SMB、WebDAV 和局域网。你还可以使用 FTP 从电脑端访问手机里的文件。
管理应用程序:你可以管理手机上安装的应用。
分析和管理储存:Cx 文件管理器提供了视觉化储存分析,让你可以快速扫描可用空间并进行管理。回收站也可以帮助你轻松管理储存。
Material Design 设计界面:Cx File Explorer 管理器采用了 Google 的 Material Design 设计风格,软件界面非常干净舒适。
总结:
如果你正在寻找简洁流畅轻量好用且免费无广告的 Android 文件管理器应用,那么 Cx File Explorer 可能就是你的最佳选择了。它基本可以完美替代 ES、Solid、Root Explorer 等一众付费的管理器 APP。
由于 CX 文件管理器不仅免费无广告,它还支持各种远程访问和远程连接,是手机自带文件管理器缺失功能的重要补充。你不用花钱购买、又无需受到广告的困扰,因此它值得每个人都下载一个在手机里备用。最后,向该软件作者表达一下感谢!
↓↓点击阅读原文获取下载地址
-
Android 存储访问框架|undefined
2021-06-03 14:28:50Android 4.4(API 级别 19)引入了存储访问框架 (SAF)。SAF 让用户能够在其所有首选文档存储提供程序中方便地浏览并打开文档、图像以及其他文件。 用户可以通过易用的标准 UI,以统一方式在所有应用和提供程序中浏览... -
寻找优秀的安卓文件管理器 五款文件管理器大评比
2021-05-28 07:27:27文件管理器是手机的必备软件,无论在以前的塞班还是如今的Android。...今天小编就对几款市场上最流行,小编也常接触使用的安卓文件管理器做个对比评测,供大家挑选使用。1、 简易文件管理简易文件管理无疑是一个优... -
乱乱乱,安卓系统的存储目录该怎么管理
2021-06-04 00:36:27原标题:乱乱乱,安卓系统的存储目录该怎么管理前段时间QQ偷偷删除手机图片一事闹得沸沸扬扬,虽然之后腾讯和华为官方都分别作出了解释和回应,但仍然给很多用户带来了疑惑。那么用户该如何管理好手机中的文件,并且... -
Android 数据库编程SQLite实现学生信息管理应用
2021-06-09 22:46:16Android 数据库编程SQLite实现学生信息管理应用https://blog.csdn.net/qq_45808700/article/details/117535524?spm=1001.2014.3001.5501 -
android权限管理
2021-05-27 04:12:15当android6.0还没普及的时候,我们对6.0权限兼容性问题很少引起重视。然而MIUI系大部分都升级到6.0以上的时候,我们的apk里权限问题爆发了,具体表现在... android 两种权限管理方式0x01:全家桶android 6.0以前,... -
安卓SD卡文件管理更新信息相关-android程序的自动更新和基于GPS定位的轨迹存储.zip
2019-07-29 16:22:41android程序的自动更新 和 基于GPS定位的轨迹存储.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
Android编程实现手机自带内部存储路径的获取方法
2021-01-20 10:29:29本文实例讲述了Android编程...我把这个手机用数据线插到电脑上,也会看到盘符,通过安装「R.E 管理器」等文件管理应用,也可以管理文件,并且能看到该存储的挂载目录是:/mnt/sdcard2 但是,我打印 Environment.getExte -
Android实验6:数据存储和访问
2021-10-12 15:02:55分别使用sqlite3工具和Android代码的方式建立SQLite数据库。在数据库建立完成后,编程实现基本的数据库添加和删除功能。创建一个学生管理的APP,基本信息包含学生姓名,班级,学号。采用数据库存储这些信息。应用... -
安卓SD卡文件管理更新信息相关-Android文件管理器打开手机存储卡支持打开本地文件(mp3jpg等)修改文件名删除...
2019-07-29 16:23:38Android文件管理器,打开手机存储卡,支持打开本地文件(mp3、jpg等),修改文件名,删除文件等功能.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
SimpleStorage::floppy_disk: 简化 Android 存储访问框架,用于跨 API 级别的文件管理
2021-08-04 20:45:29简单存储可让您轻松访问和管理跨 API 级别的文件。 如果你想了解更多关于这个库的背景,请阅读这篇文章: Android 中的 Easy Storage Access Framework with SimpleStorage 将 Simple Storage 添加到您的项目中... -
10款优秀的Android文件管理器
2021-05-26 11:15:36原标题:10款优秀的Android文件管理器文件管理器是管理文件的软件,帮助用户处理日常工作,管理储存在本地和网络中的文件。所有文件管理器都提供了基本的操作如创建、打开、查看、编辑、移动和删除文件。许多Android...