Q:我应该去哪里获取不同版本的存储策略
A:要获取不同版本的 Android 存储策略(Storage Policies),您可以访问以下资源,这些资源提供了详细的版本特定存储策略和变更的信息:
官方 Android 文档
Android 官方文档是了解不同版本存储策略最可靠的来源。以下是一些重要的链接:
**Android Developers Storage Documentation**:
这是 Android 官方的存储文档,涵盖了各种存储选项和最佳实践。**Android Platform Releases**:
这个页面提供了每个 Android 版本的详细变更,包括存储策略的变更。**Scoped Storage**:
针对 Android 10(API Level 29)及更高版本的分区存储(Scoped Storage),是存储策略的重要变更点。
官方博客和公告
Android 官方博客和公告也是了解存储策略变更的好资源:
- **Android Developers Blog**:
在这个博客上,Google 发布了关于新功能和存储策略变更的详细信息和指导。
GitHub 和社区资源
开源社区和开发者论坛也提供了大量关于存储策略的信息:
**Google Samples on GitHub**:
Google 提供的示例项目,可以查看不同版本的存储策略实现。**Stack Overflow**:
搜索关于 Android 存储策略的问题和答案,可以获取社区的解决方案和建议。
具体版本的存储策略变更
要了解具体版本的存储策略变更,可以参考以下步骤:
访问 Android 开发者文档中的版本变更日志:
每个 Android 版本的变更日志会详细列出该版本的新特性和变更,包括存储策略。查找特定版本的存储策略文档:
在 Android Developers 网站上,您可以找到特定版本的 API 参考和变更日志。
直接搜索具体问题
如果您有特定的存储策略问题,可以直接在 Google 搜索:
- 例如:
Android 10 Scoped Storage
- 例如:
Android 11 Storage Policy Changes
通过这些资源,您应该能够找到详细的 Android 存储策略信息,并理解每个版本的特定变更。
Android 6 以下的文件存储和读取策略
在Android 6.0(API Level 23)及以下版本中,文件存储和读取的策略主要涉及以下几个方面:
1. 存储位置
Android系统提供了两种主要的存储位置:内部存储和外部存储。
内部存储
- 内部存储是应用的私有存储区域,只有该应用可以访问。
- 存储在内部存储中的文件默认在应用卸载时会被删除。
- 使用
Context
对象的方法可以在内部存储中读写文件,例如:openFileOutput(String name, int mode)
:写文件openFileInput(String name)
:读文件
外部存储
- 外部存储可以是设备的外部存储卡或者内置存储分区。
- 分为公共外部存储和应用私有外部存储。
- 公共外部存储可以被所有应用访问,例如图片、音频文件等。
- 应用私有外部存储只能被创建该文件的应用访问,在应用卸载时会被删除。
- 使用
Environment
类和Context
对象的方法可以在外部存储中读写文件,例如:getExternalFilesDir(String type)
:获取应用私有外部存储目录Environment.getExternalStoragePublicDirectory(String type)
:获取公共外部存储目录
2. 权限管理
在Android 6.0及以下版本中,应用需要在AndroidManifest.xml
中声明对外部存储的读写权限:
- 读权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这些权限在应用安装时由用户批准。
3. 文件操作代码示例
内部存储
写文件:
1 | String filename = "myfile.txt"; |
读文件:
1 | FileInputStream fis = openFileInput(filename); |
外部存储
检查存储状态:
1 | String state = Environment.getExternalStorageState(); |
写文件:
1 | File file = new File(getExternalFilesDir(null), "myfile.txt"); |
读文件:
1 | File file = new File(getExternalFilesDir(null), "myfile.txt"); |
这些代码示例展示了在Android 6.0及以下版本中如何进行基本的文件读写操作。随着Android版本的升级,文件存储和权限管理策略也发生了显著变化,因此在开发过程中需要根据目标API版本进行适配。
Android 6 以上文件存储和读取策略
在Android 6.0(API Level 23)及以上版本中,文件存储和读取策略发生了一些变化,特别是在权限管理和存储位置的使用方面。以下是各版本的策略变化和相应的文件存储读写方法。
1. Android 6.0 (API Level 23)
动态权限
- 从Android 6.0开始,权限管理采用动态权限模式。用户可以在运行时授予或拒绝权限。
- 应用在使用外部存储时,需要在
AndroidManifest.xml
中声明权限,并在运行时请求权限。
权限请求代码示例:
1 | if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) |
2. Android 7.0 (API Level 24)
文件URI策略
- 从Android 7.0开始,
File
URI不再被允许在应用之间共享。必须使用FileProvider
来共享文件URI。
FileProvider
配置示例:
在AndroidManifest.xml
中:
1 | <provider |
在res/xml/file_paths.xml
中:
1 | <paths> |
3. Android 8.0 (API Level 26)
安全性增强
- 在后台执行文件操作受到限制,必须在前台任务或通过服务进行文件操作。
4. Android 9.0 (API Level 28)
共享存储访问
- 在Android 9.0中引入了新的API,用于访问共享存储,推荐使用
ACTION_OPEN_DOCUMENT
和ACTION_CREATE_DOCUMENT
来访问和创建文件。
使用示例:
1 | Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); |
5. Android 10 (API Level 29)
分区存储 (Scoped Storage)
- 引入了分区存储,应用只能访问其私有的外部存储空间,除非使用特定的API访问公共存储。
- 可以通过请求Legacy存储模式来继续使用传统的存储访问方式(直到Android 11)。
分区存储代码示例:
1 | File file = new File(getExternalFilesDir(null), "myfile.txt"); |
6. Android 11 (API Level 30)
强制分区存储
- 强制启用分区存储,应用无法再使用
requestLegacyExternalStorage
标志。 - 提供了新的访问存储的API,如
MediaStore
。
MediaStore使用示例:
1 | ContentValues values = new ContentValues(); |
7. Android 12 (API Level 31) 及更高版本
进一步限制外部存储访问
- 在Android 12中,对特定类型的文件访问进行了更多的限制,需要使用特定的API来访问不同类型的文件,如音频、视频和图片等。
总结:
- Android 6.0及以上版本在权限管理上采用动态权限,需要在运行时请求权限。
- Android 7.0开始引入
FileProvider
来共享文件URI。 - Android 10引入分区存储,Android 11强制启用分区存储,进一步限制了应用对外部存储的访问。
- 使用
MediaStore
等新的API来进行文件的读写操作,以适应最新的存储策略。
了解并适应这些变化,可以确保应用在不同Android版本上的文件存储和读取操作安全且有效。