Android 10存储空间限制

Android 10(API 级别 29)引入了 Scoped Storage,这是一项重大变更,旨在加强用户数据安全性和隐私保护。这篇博客将介绍 Android 10 存储空间限制的背景、旧版本和新版本的对比、细节点、注意事项、必须适配的版本以及实现方式。

背景

在旧版 Android 系统中,应用程序可以自由访问设备的外部存储空间,这导致了一些安全和隐私问题。为了解决这些问题,Android 10 引入了 Scoped Storage,限制了应用程序对外部存储的访问权限,提高了数据的隐私性和安全性。

旧版本如何实现和新版本对比

旧版本(Android 9 及以下)

在旧版本中,应用程序可以自由访问设备上的任何文件和目录,包括其他应用程序的文件。这种开放的存储访问方式存在安全隐患,可能导致数据泄露和恶意操作。

新版本(Android 10 及以上)

在 Android 10 及更高版本中,应用程序被限制在自己的专属目录中进行操作。应用程序只能直接访问自身的专属目录,而要访问共享文件或其他应用程序的文件,必须通过特定的 API 和权限进行访问。

细节点

  1. 应用专属目录:应用程序只能访问自身的沙箱化目录,无法直接访问其他应用程序的文件。
  2. 共享存储:一些特定的共享目录仍然可以被访问,但访问方式受到限制。
  3. 文件管理 API:引入了新的文件管理 API,如 Storage Access Framework(SAF)或 MediaStore API,用于访问外部存储空间。
  4. 权限申请 :应用程序需要请求适当的权限(例如 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE)来访问外部存储。

注意点

  1. 适时适配:开发者应及早适配 Scoped Storage,以确保应用程序在新版本的 Android 系统上正常运行。
  2. 权限申请:合理请求权限,避免过度请求,仅在必要时请求外部存储权限。
  3. 使用新 API:逐步迁移到使用新的文件管理 API,以符合 Scoped Storage 的要求。

必须适配的版本

从 Android 11 开始,所有应用程序都必须适配 Scoped Storage。因此,建议开发者从 Android 10 开始就适配 Scoped Storage,以确保后续版本的兼容性。

实现的方式

使用 Storage Access Framework(SAF)

ini 复制代码
markdown复制代码
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_CODE);

使用 MediaStore API

ini 复制代码
markdown复制代码
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, "image.jpg");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

请求权限

ini 复制代码
markdown复制代码
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

结语

了解和适配 Android 10 的存储空间限制对于开发安全可靠的应用程序至关重要。通过使用新的文件管理 API、合理请求权限以及及时适配 Scoped Storage,可以提高应用程序的数据安全性和用户隐私保护,同时确保应用程序在新版本的 Android 系统上正常运行。

相关推荐
蜡台21 分钟前
Android Gradle 项目下载编译失败解决---持续更新
android·java·kotlin·gradle
黄昏晓x1 小时前
C++11
android·java·c++
simplepeng2 小时前
TikTok 通过 Jetpack Compose 将代码大小减少 58%,并提升了新功能的 app 性能
android·android jetpack
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于Android的充电宝租赁管理软件的设计与实现为例,包含答辩的问题和答案
android
Be for thing2 小时前
Android 蓝牙 & WiFi 硬件原理 + 功耗与异常定位实战(手机 / 手表 / IoT 通用)
android·物联网·学习
00后程序员张2 小时前
使用克魔助手(Keymob)查看 iOS 设备日志与崩溃报告
android·macos·ios·小程序·uni-app·cocoa·iphone
__Yvan3 小时前
解决ConstraintLayout中LinearLayout显示异常问题
android·xml·约束布局
mjhcsp3 小时前
C++ A* 算法:启发式路径搜索的黄金标准
android·c++·算法
2501_915918413 小时前
通过IPA 结构调整和资源指纹变化来处理 iOS 应用相似度问题
android·ios·小程序·https·uni-app·iphone·webview
火山上的企鹅3 小时前
Qt/QGroundControl 实战:接入 Skydroid(云卓) G20 遥控器 Android SDK 并实时显示摇杆与信号质量
android·开发语言·qt·qgroundcontrol·云卓sdk