外部存储(External Storage)

在Android中,外部存储(External Storage)可以进一步细分为公共外部存储(Public External Storage)和私有外部存储(Private External Storage)。这两种类型的存储有着不同的访问权限、使用场景和生命周期管理方式。

### 公共外部存储 (Public External Storage)

- **定义**: 公共外部存储是指设备上的共享区域,所有应用程序都可以读取和写入这里的数据。用户也可以通过连接电脑或者其他方式直接访问这些文件。
- **使用场景**: 适合用于存放需要与其它应用共享或让用户直接访问的文件,比如图片、视频、音乐等媒体文件。
- **路径**: 通常位于`/sdcard/`或者`/storage/emulated/0/`下,具体位置取决于设备制造商和Android版本。
- **权限要求**: 需要声明`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限(根据API级别可能需要运行时请求)。
- **生命周期**: 文件不会因为你的应用程序被卸载而自动删除,因此你需要自行管理这些文件的生命周期。

### 私有外部存储 (Private External Storage)

- **定义**: 尽管名称中有“私有”,但私有外部存储实际上还是位于外部存储介质上。它指的是特定于应用的目录,其他应用不能直接访问这些目录内的文件,除非它们有明确的权限。
- **使用场景**: 适合用于存放只供你的应用使用的文件,如缓存文件、下载内容或其他不需要与其他应用共享的数据。
- **路径**: 可以通过`Context.getExternalFilesDir()`方法获得,返回的是一个类似于`/sdcard/Android/data/<package_name>/files/`的路径。
- **权限要求**: 不需要额外声明读写权限,因为这是你的应用的私有空间。
- **生命周期**: 当用户卸载应用程序时,系统会自动删除该应用在私有外部存储中的所有文件,简化了开发者对于数据清理的工作。

需要注意的是,从Android 10 (API level 29)开始,Google引入了分区存储(Scoped Storage),这改变了应用程序如何访问外部存储的方式。为了更好地保护用户隐私,默认情况下,应用程序只能访问自己创建的文件以及某些特定类型的媒体文件(如照片、视频和音频文件)。如果应用程序需要访问更多类型的文件,则需要遵循新的存储权限模型,并且可能需要向用户提供选择文件或目录的界面。

在Android设备上,存储主要分为两种类型:内部存储(Internal Storage)和外部存储(External Storage)。下面我将详细解释这两种类型的存储及其使用方法。

### 内部存储 (Internal Storage)

内部存储是应用程序的私有数据存储区域。这里的文件对其他应用程序不可见,并且在用户卸载应用时会被删除。你可以使用以下方式来保存数据:

- **SharedPreferences**: 用于存储简单的键值对数据。
- **Files**: 创建、读取、更新或删除文件。通常使用`Context.openFileInput()`和`Context.openFileOutput()`方法。
- **Databases**: 使用SQLite数据库来存储结构化数据。通过`SQLiteOpenHelper`类可以方便地管理数据库的创建和版本管理。

### 外部存储 (External Storage)

外部存储包括SD卡和其他可移除媒体,也可能是设备自带的公共存储空间。外部存储上的文件可以被所有应用程序访问,并且可以在没有运行你的应用程序的情况下查看这些文件。从Android 4.4 (API level 19)开始,系统允许应用程序访问特定于应用的目录,而不需请求额外权限。

- **Public External Storage**: 用于存储公开共享的数据,如图片、视频等。你需要检查可用性并处理写入权限。
- **Private External Storage**: 存储特定于应用的数据,即使位于外部存储中,也只能由你的应用访问。这些文件不会在用户卸载应用时自动删除,因此你应当管理好这些文件的生命周期。

从Android 6.0 (API level 23)开始,Google引入了运行时权限模型,这意味着对于一些敏感操作(例如读写外部存储),你需要在运行时向用户请求权限,而不仅仅是声明在`AndroidManifest.xml`中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值