Android系统从Android 10开始,引入了Scoped Storage机制,该机制旨在加强安全性并限制对外部存储器的访问。它可以限制应用程序直接访问外部存储器根目录的权限,只有与应用程序关联的存储空间可以进行读写操作。这意味着,应用程序如果想要访问外部存储器,必须向用户请求权限。
下面是如何在Android应用程序中读取外部存储器的代码示例:
// 检查读写外部存储器的权限
if (ContextCompat.checkSelfPermission(
context, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
// 如果用户已经授权,则开始读写存储
} else {
// 如果用户没有授权,则向用户请求授权
ActivityCompat.requestPermissions(
activity,
new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE
);
}
// 处理用户的权限请求响应
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 如果用户已经同意访问外部存储器,则开始读写存储
} else {
// 如果用户拒绝访问外部存储器,则向用户显示一条消息
}
return;
}
}
}
而如果我们希望使用Scoped Storage机制的话,我们可以通过类似以下代码的方式来读取外部存储器:
// 获取与应用程序关联的存储空间的根目录
File file = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
// 读取该存储空间下图片文件的内容并展示
List pictureFilesList