分区存储
1、访问特定应用目录
//String externalStorageDir = Environment.getExternalStorageDirectory().toString(); //弃用
String externalCacheDir = context.getExternalCacheDir().toString();
String externalFilesDirEmpty = context.getExternalFilesDir("").toString();
String externalFilesDirUserNamed = context.getExternalFilesDir("test_android_10_fit").toString();
String externalFilesDirEnvironmentMusic = context.getExternalFilesDir(Environment.DIRECTORY_MUSIC).toString();
String externalFilesDirEnvironmentAlarms = context.getExternalFilesDir(Environment.DIRECTORY_ALARMS).toString();
String externalFilesDirEnvironmentNotifications = context.getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS).toString();
String externalFilesDirEnvironmentPicture = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString();
String externalFilesDirEnvironmentMOvies = context.getExternalFilesDir(Environment.DIRECTORY_MOVIES).toString();
String externalFilesDirEnvironmentDownloads = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();
String externalFilesDirEnvironmentDcim = context.getExternalFilesDir(Environment.DIRECTORY_DCIM).toString();
String externalFilesDirEnvironmentDocuments = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).toString();
2、访问媒体集合(MediaStore)
3、通过“存储访问框架”可以访问到上面提到的目录以及一些系统公共目录(如:download)(存储访问框架只能访问特定目录的文件,如果应用尝试通过原始文件系统视图打开此目录之外的文件,则会报错)
注意:如果需要访问其他应用创建的文件(如 download 中的文件)()
1、需要获得 READ_EXTERNAL_STORAGE 权限
2、这些文件位于以下其中一个明确定义的媒体集合中
- 照片:存储在 MediaStore.Images 中。
- 视频:存储在 MediaStore.Video 中。
- 音频文件:存储在 MediaStore.Audio 中。
关于 ACCESS_BACKGROUND_LOCATION 权限
ACCESS_BACKGROUND_LOCATION 权限是在 Android 10 中引入的。
如果应用在后台访问设备的位置,则需要申请该权限。
刚好今天看到郭神的推文,就顺便补充记录一下。
1、 ACCESS_BACKGROUND_LOCATION 权限 在 Android 11 系统中变成了一个要去单独申请的权限,和前台位置权限同时申请时会产生奔溃。
2、在 Android 10 中,ACCESS_BACKGROUND_LOCATION 和前台权限是可以一起申请的,会产生两次权限申请对话框。
项目中有用到 permissionX 这个框架,就不用自己去处理权限申请方面的逻辑了。最新版的 permissionX 也对上面提到的两点做了适配。
(注:在 Android 10 以下的系统中是不存在 ACCESS_BACKGROUND_LOCATION 这个权限的,所以在使用 permissionX 时需要判断当前系统版本,决定要不要申请 ACCESS_BACKGROUND_LOCATION 权限)
下面是官方文档的描述:
随机分配的 MAC 地址
Android 10 及以上的设备,系统会传输随机分配的 MAC 地址。
设备标识符
项目中有用到 IMEI 来拼接设备唯一标识符的。从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE
特许权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。
限制了对剪贴板数据的访问权限
除非您的应用是默认输入法 (IME) 或是目前处于焦点的应用,否则它无法访问 Android 10 或更高版本平台上的剪贴板数据。